) where
-- A type representing the number of bits in a CIDR netmask.
-data Maskbits = None | Maskbits Int
- deriving (Eq, Show)
+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, Show)
-- 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 x | (x < 0) || (x > 32) = None
- | otherwise = Maskbits x
+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
maskbits_from_string :: String -> Maskbits