]> gitweb.michael.orlitzky.com - hath.git/blobdiff - src/Maskbits.hs
Rewrite everything to use Maybe instead of None constructors.
[hath.git] / src / Maskbits.hs
index 06314e395f2043c12da778f81405203692e5ded2..d7064d89ad81ee615fa9c0c470636b423db2687e 100644 (file)
@@ -7,167 +7,165 @@ module Maskbits
 import Test.QuickCheck
 
 -- A type representing the number of bits in a CIDR netmask.
-data Maskbits = None
-              | Zero
-              | One
-              | Two
-              | Three
-              | Four
-              | Five
-              | Six
-              | Seven
-              | Eight
-              | Nine
-              | Ten
-              | Eleven
-              | Twelve
-              | Thirteen
-              | Fourteen
-              | Fifteen
-              | Sixteen
-              | Seventeen
-              | Eighteen
-              | Nineteen
-              | Twenty
-              | TwentyOne
-              | TwentyTwo
-              | TwentyThree
-              | TwentyFour
-              | TwentyFive
-              | TwentySix
-              | TwentySeven
-              | TwentyEight
-              | TwentyNine
-              | Thirty
-              | ThirtyOne
-              | ThirtyTwo
-              deriving (Eq, Ord)
+data Maskbits =
+    Zero
+  | One
+  | Two
+  | Three
+  | Four
+  | Five
+  | Six
+  | Seven
+  | Eight
+  | Nine
+  | Ten
+  | Eleven
+  | Twelve
+  | Thirteen
+  | Fourteen
+  | Fifteen
+  | Sixteen
+  | Seventeen
+  | Eighteen
+  | Nineteen
+  | Twenty
+  | TwentyOne
+  | TwentyTwo
+  | TwentyThree
+  | TwentyFour
+  | TwentyFive
+  | TwentySix
+  | TwentySeven
+  | TwentyEight
+  | TwentyNine
+  | Thirty
+  | ThirtyOne
+  | ThirtyTwo
+    deriving (Eq, Ord)
 
 
 instance Show Maskbits where
-    show None        = "None"
-    show Zero        = "0"
-    show One         = "1"
-    show Two         = "2"
-    show Three       = "3"
-    show Four        = "4"
-    show Five        = "5"
-    show Six         = "6"
-    show Seven       = "7"
-    show Eight       = "8"
-    show Nine        = "9"
-    show Ten         = "10"
-    show Eleven      = "11"
-    show Twelve      = "12"
-    show Thirteen    = "13"
-    show Fourteen    = "14"
-    show Fifteen     = "15"
-    show Sixteen     = "16"
-    show Seventeen   = "17"
-    show Eighteen    = "18"
-    show Nineteen    = "19"
-    show Twenty      = "20"
-    show TwentyOne   = "21"
-    show TwentyTwo   = "22"
-    show TwentyThree = "23"
-    show TwentyFour  = "24"
-    show TwentyFive  = "25"
-    show TwentySix   = "26"
-    show TwentySeven = "27"
-    show TwentyEight = "28"
-    show TwentyNine  = "29"
-    show Thirty      = "30"
-    show ThirtyOne   = "31"
-    show ThirtyTwo   = "32"
+  show Zero        = "0"
+  show One         = "1"
+  show Two         = "2"
+  show Three       = "3"
+  show Four        = "4"
+  show Five        = "5"
+  show Six         = "6"
+  show Seven       = "7"
+  show Eight       = "8"
+  show Nine        = "9"
+  show Ten         = "10"
+  show Eleven      = "11"
+  show Twelve      = "12"
+  show Thirteen    = "13"
+  show Fourteen    = "14"
+  show Fifteen     = "15"
+  show Sixteen     = "16"
+  show Seventeen   = "17"
+  show Eighteen    = "18"
+  show Nineteen    = "19"
+  show Twenty      = "20"
+  show TwentyOne   = "21"
+  show TwentyTwo   = "22"
+  show TwentyThree = "23"
+  show TwentyFour  = "24"
+  show TwentyFive  = "25"
+  show TwentySix   = "26"
+  show TwentySeven = "27"
+  show TwentyEight = "28"
+  show TwentyNine  = "29"
+  show Thirty      = "30"
+  show ThirtyOne   = "31"
+  show ThirtyTwo   = "32"
 
 
 instance Arbitrary Maskbits where
-    arbitrary = elements [ Zero,
-                           One,
-                           Two,
-                           Three,
-                           Four,
-                           Five,
-                           Six,
-                           Seven,
-                           Eight,
-                           Nine,
-                           Ten,
-                           Eleven,
-                           Twelve,
-                           Thirteen,
-                           Fourteen,
-                           Fifteen,
-                           Sixteen,
-                           Seventeen,
-                           Eighteen,
-                           Nineteen,
-                           Twenty,
-                           TwentyOne,
-                           TwentyTwo,
-                           TwentyThree,
-                           TwentyFour,
-                           TwentyFive,
-                           TwentySix,
-                           TwentySeven,
-                           TwentyEight,
-                           TwentyNine,
-                           Thirty,
-                           ThirtyOne,
-                           ThirtyTwo ]
+  arbitrary =
+    elements [ Zero,
+               One,
+               Two,
+               Three,
+               Four,
+               Five,
+               Six,
+               Seven,
+               Eight,
+               Nine,
+               Ten,
+               Eleven,
+               Twelve,
+               Thirteen,
+               Fourteen,
+               Fifteen,
+               Sixteen,
+               Seventeen,
+               Eighteen,
+               Nineteen,
+               Twenty,
+               TwentyOne,
+               TwentyTwo,
+               TwentyThree,
+               TwentyFour,
+               TwentyFive,
+               TwentySix,
+               TwentySeven,
+               TwentyEight,
+               TwentyNine,
+               Thirty,
+               ThirtyOne,
+               ThirtyTwo ]
 
 
 
--- There are only 32 bits in an IPv4 address, so there
--- can't be more bits than that in the mask.
-maskbits_from_int :: Int -> Maskbits
-maskbits_from_int 0  = Zero
-maskbits_from_int 1  = One
-maskbits_from_int 2  = Two
-maskbits_from_int 3  = Three
-maskbits_from_int 4  = Four
-maskbits_from_int 5  = Five
-maskbits_from_int 6  = Six
-maskbits_from_int 7  = Seven
-maskbits_from_int 8  = Eight
-maskbits_from_int 9  = Nine
-maskbits_from_int 10 = Ten
-maskbits_from_int 11 = Eleven
-maskbits_from_int 12 = Twelve
-maskbits_from_int 13 = Thirteen
-maskbits_from_int 14 = Fourteen
-maskbits_from_int 15 = Fifteen
-maskbits_from_int 16 = Sixteen
-maskbits_from_int 17 = Seventeen
-maskbits_from_int 18 = Eighteen
-maskbits_from_int 19 = Nineteen
-maskbits_from_int 20 = Twenty
-maskbits_from_int 21 = TwentyOne
-maskbits_from_int 22 = TwentyTwo
-maskbits_from_int 23 = TwentyThree
-maskbits_from_int 24 = TwentyFour
-maskbits_from_int 25 = TwentyFive
-maskbits_from_int 26 = TwentySix
-maskbits_from_int 27 = TwentySeven
-maskbits_from_int 28 = TwentyEight
-maskbits_from_int 29 = TwentyNine
-maskbits_from_int 30 = Thirty
-maskbits_from_int 31 = ThirtyOne
-maskbits_from_int 32 = ThirtyTwo
-maskbits_from_int _ = None
+-- There are only 32 bits in an IPv4 address, so there
+--   can't be more bits than that in the mask.
+maskbits_from_int :: Int -> Maybe Maskbits
+maskbits_from_int 0  = Just Zero
+maskbits_from_int 1  = Just One
+maskbits_from_int 2  = Just Two
+maskbits_from_int 3  = Just Three
+maskbits_from_int 4  = Just Four
+maskbits_from_int 5  = Just Five
+maskbits_from_int 6  = Just Six
+maskbits_from_int 7  = Just Seven
+maskbits_from_int 8  = Just Eight
+maskbits_from_int 9  = Just Nine
+maskbits_from_int 10 = Just Ten
+maskbits_from_int 11 = Just Eleven
+maskbits_from_int 12 = Just Twelve
+maskbits_from_int 13 = Just Thirteen
+maskbits_from_int 14 = Just Fourteen
+maskbits_from_int 15 = Just Fifteen
+maskbits_from_int 16 = Just Sixteen
+maskbits_from_int 17 = Just Seventeen
+maskbits_from_int 18 = Just Eighteen
+maskbits_from_int 19 = Just Nineteen
+maskbits_from_int 20 = Just Twenty
+maskbits_from_int 21 = Just TwentyOne
+maskbits_from_int 22 = Just TwentyTwo
+maskbits_from_int 23 = Just TwentyThree
+maskbits_from_int 24 = Just TwentyFour
+maskbits_from_int 25 = Just TwentyFive
+maskbits_from_int 26 = Just TwentySix
+maskbits_from_int 27 = Just TwentySeven
+maskbits_from_int 28 = Just TwentyEight
+maskbits_from_int 29 = Just TwentyNine
+maskbits_from_int 30 = Just Thirty
+maskbits_from_int 31 = Just ThirtyOne
+maskbits_from_int 32 = Just ThirtyTwo
+maskbits_from_int _  = Nothing
 
-
-maskbits_from_string :: String -> Maskbits
+maskbits_from_string :: String -> Maybe Maskbits
 maskbits_from_string s =
-    case (reads s :: [(Int, String)]) of
-      []   -> None
-      x:_ -> maskbits_from_int (fst x)
+  case (reads s :: [(Int, String)]) of
+    []   -> Nothing
+    x:_ -> maskbits_from_int (fst x)
 
 
 
 decrement :: Maskbits -> Maskbits
-decrement None = None
-decrement Zero = None
+decrement Zero = Zero
 decrement One = Zero
 decrement Two = One
 decrement Three = Two