X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FBit.hs;h=5c8c5aa25903ba4332db63faaf55ccfd0e2e0f44;hb=e1d16438b44ecd962565756a828c9ed8014cf894;hp=1c7de7bf4169862cf791e8ebf6bd5e92751a4852;hpb=64dfebebdecd1119ab8345a6de34597f6a878a98;p=hath.git diff --git a/src/Bit.hs b/src/Bit.hs index 1c7de7b..5c8c5aa 100644 --- a/src/Bit.hs +++ b/src/Bit.hs @@ -1,15 +1,35 @@ -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 ( + Arbitrary, + arbitrary, + elements + ) + data Bit = Zero | One - deriving (Eq, Show) + 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, --- default to Zero. -bit_from_char :: Char -> Bit -bit_from_char '0' = Zero -bit_from_char '1' = One -bit_from_char _ = Zero +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