data Bit = Zero | One
- deriving (Eq)
+ deriving (Enum, Eq)
instance Show Bit where
show Zero = "0"
arbitrary = elements [ Zero, One ]
+instance Ord Bit where
+ Zero <= Zero = True
+ Zero <= One = True
+ One <= Zero = False
+ One <= One = True
+
+instance Bounded Bit where
+ minBound = Zero
+ maxBound = 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, default to Nothing.
+-- appropriately. Otherwise, return Nothing.
bit_from_char :: Char -> Maybe Bit
bit_from_char '0' = Just Zero
bit_from_char '1' = Just One