Преобразование битов в Int8 Haskell


Пытаюсь преобразовать список битов (0,1) в Int8 или что-то подобное, чтобы я не тратил байт из ByteString только на 1 бит

Например, у меня может быть список типа [0,1,0,0,0,1,1,1,1,0], который в качестве Байтестринга представляет каждый из них как байт вместо бита.

1 2

1 ответ:

Одним из решений было бы просто сложить список:

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