6
import Data.List as List
8
import Data.Bool as Bool
17
shiftL : Nat -> Nat -> Nat
18
shiftL n i = n * 2 ^ i
20
sucBits : List Bit -> List Bit
21
sucBits [] = true :: []
22
sucBits (false :: xs) = true :: xs
23
sucBits (true :: xs) = false :: sucBits xs
25
toBits : Nat -> List Bit
27
toBits (suc n) = sucBits (odd n :: toBits (div n 2))
29
fromBits : List Bit -> Nat
30
fromBits xs = foldr (\b n -> bitValue b + 2 * n) 0 xs
33
bitValue b = if b then 1 else 0
36
nofBits = length ∘ toBits