将位转换为 Int8 Haskell

Convert Bits to Int8 Haskell

尝试将位列表 (0,1) 转换为 Int8 或类似的东西,这样我就不会浪费 ByteString 中只有 1 位的字节

例如,我可能有一个像 [0,1,0,0,0,1,1,1,1,0] 这样的列表,它作为一个 ByteString 将其中的每一个表示为一个 Byte 而不是一个位.

一个解决方案是折叠列表:

import Data.Bits (Bits, shiftL, (.|.))

pack :: (Num b, Foldable t, Bits b) => t b -> b
pack a = foldl go 0 a
    where go acc i = (acc `shiftL` 1) .|. i

你得到:

\> pack [0,1,0,0,0,1,1,1,1,0]
286