
Alec Benzer
What's the quickest/the best/a way of converting a series of bits into bytes? Ie, converting a [Bool] to a [Word8]. So if I had replicate 8 True ++ replicate 8 False :: [Bool], it would spit out [255,0] :: [Word8].
Here is my variant: import Data.Bits chunks :: Int -> [a] -> [[a]] chunks n = takeWhile (not . null) . map (take n) . iterate (drop n) boolToDigit :: Num i => Bool -> i boolToDigit False = 0 boolToDigit True = 1 bitsToByte :: Num i => [Bool] -> i bitsToByte = sum . zipWith (*) (iterate (*2) 1) . map boolToDigit bitsToBytes :: Bits i => [Bool] -> [i] bitsToBytes x = y where ~y@(y0:ys) = map bitsToByte . chunks (bitSize y0) $ x It works for every binary type with a fixed length, so you can use it with Word8, Word16, etc. Greets, Ertugrul -- nightmare = unsafePerformIO (getWrongWife >>= sex) http://ertes.de/