babynf-0.1.0.2: lib/Data/BAByNF/Util/Binary.hs
module Data.BAByNF.Util.Binary
( Digit (..)
, Seq (..)
, val
, toNum
, fromVal
, toChar
) where
data Digit = B0 | B1 deriving (Eq, Ord)
newtype Seq = Seq [Digit] deriving Eq
val :: Integral a => Digit -> a
val B0 = 0
val B1 = 1
toNum :: Integral a => Seq -> a
toNum (Seq digits) = toNum' digits 0
where toNum' [] acc = acc
toNum' (d : ds) acc =
let newAcc = (acc * 2) + val d
in toNum' ds newAcc
fromVal :: Integral a => a -> Maybe Digit
fromVal 0 = Just B0
fromVal 1 = Just B1
fromVal _ = Nothing
instance Show Seq where
show (Seq x) = map toChar x
toChar :: Digit -> Char
toChar B0 = '0'
toChar B1 = '1'