module Music.Theory.Bits where
import Data.Bits
bit_pp :: Bool -> Char
bit_pp b = if b then '1' else '0'
bits_pp :: [Bool] -> String
bits_pp = map bit_pp
gen_bitseq :: FiniteBits b => Int -> b -> [Bool]
gen_bitseq n x =
if finiteBitSize x < n
then error "gen_bitseq"
else map (testBit x) (reverse [0 .. n 1])
pack_bitseq :: Bits i => [Bool] -> i
pack_bitseq =
last .
scanl (\n (k,b) -> if b then setBit n k else n) zeroBits .
zip [0..] .
reverse
gen_bitseq_pp :: FiniteBits b => Int -> b -> String
gen_bitseq_pp n = bits_pp . gen_bitseq n