- show None = "None"
- show Zero = "0"
- show One = "1"
-
-
-bit_to_int :: Bit -> Int
-bit_to_int None = -1
-bit_to_int Zero = 0
-bit_to_int One = 1
-
--- If we are passed a '0' or '1', convert it appropriately. Otherwise,
--- default to None.
-bit_from_char :: Char -> Bit
-bit_from_char '0' = Zero
-bit_from_char '1' = One
-bit_from_char _ = None
+ show Zero = "0"
+ show One = "1"
+
+
+instance Arbitrary Bit where
+ 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