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