-- | The Bit module contains the Bit data type, which is essentially a -- renamed Boolean, and some convenience functions. module Bit where import Test.QuickCheck ( Arbitrary, arbitrary, elements ) data Bit = Zero | One deriving (Eq) instance Show Bit where show Zero = "0" show One = "1" instance Arbitrary Bit where arbitrary = elements [ Zero, One ] -- | Convert a Bit to an Int. bit_to_int :: Bit -> Int bit_to_int Zero = 0 bit_to_int One = 1 -- | If we are passed a '0' or '1', convert it -- appropriately. Otherwise, return Nothing. bit_from_char :: Char -> Maybe Bit bit_from_char '0' = Just Zero bit_from_char '1' = Just One bit_from_char _ = Nothing