9 -- | A type representing the number of bits in a CIDR netmask.
47 instance Show Maskbits where
71 show TwentyThree = "23"
72 show TwentyFour = "24"
73 show TwentyFive = "25"
75 show TwentySeven = "27"
76 show TwentyEight = "28"
77 show TwentyNine = "29"
83 instance Arbitrary Maskbits where
121 -- | There are only 32 bits in an IPv4 address, so there
122 -- can't be more bits than that in the mask.
123 maskbits_from_int :: Int -> Maybe Maskbits
124 maskbits_from_int 0 = Just Zero
125 maskbits_from_int 1 = Just One
126 maskbits_from_int 2 = Just Two
127 maskbits_from_int 3 = Just Three
128 maskbits_from_int 4 = Just Four
129 maskbits_from_int 5 = Just Five
130 maskbits_from_int 6 = Just Six
131 maskbits_from_int 7 = Just Seven
132 maskbits_from_int 8 = Just Eight
133 maskbits_from_int 9 = Just Nine
134 maskbits_from_int 10 = Just Ten
135 maskbits_from_int 11 = Just Eleven
136 maskbits_from_int 12 = Just Twelve
137 maskbits_from_int 13 = Just Thirteen
138 maskbits_from_int 14 = Just Fourteen
139 maskbits_from_int 15 = Just Fifteen
140 maskbits_from_int 16 = Just Sixteen
141 maskbits_from_int 17 = Just Seventeen
142 maskbits_from_int 18 = Just Eighteen
143 maskbits_from_int 19 = Just Nineteen
144 maskbits_from_int 20 = Just Twenty
145 maskbits_from_int 21 = Just TwentyOne
146 maskbits_from_int 22 = Just TwentyTwo
147 maskbits_from_int 23 = Just TwentyThree
148 maskbits_from_int 24 = Just TwentyFour
149 maskbits_from_int 25 = Just TwentyFive
150 maskbits_from_int 26 = Just TwentySix
151 maskbits_from_int 27 = Just TwentySeven
152 maskbits_from_int 28 = Just TwentyEight
153 maskbits_from_int 29 = Just TwentyNine
154 maskbits_from_int 30 = Just Thirty
155 maskbits_from_int 31 = Just ThirtyOne
156 maskbits_from_int 32 = Just ThirtyTwo
157 maskbits_from_int _ = Nothing
160 -- | Convert a String to Maskbits, if possible.
161 maskbits_from_string :: String -> Maybe Maskbits
162 maskbits_from_string s =
163 case (reads s :: [(Int, String)]) of
165 x:_ -> maskbits_from_int (fst x)
169 -- | Maskbits are just natural numbers, this returns the previous one.
170 decrement :: Maskbits -> Maskbits
171 decrement Zero = Zero
174 decrement Three = Two
175 decrement Four = Three
176 decrement Five = Four
178 decrement Seven = Six
179 decrement Eight = Seven
180 decrement Nine = Eight
182 decrement Eleven = Ten
183 decrement Twelve = Eleven
184 decrement Thirteen = Twelve
185 decrement Fourteen = Thirteen
186 decrement Fifteen = Fourteen
187 decrement Sixteen = Fifteen
188 decrement Seventeen = Sixteen
189 decrement Eighteen = Seventeen
190 decrement Nineteen = Eighteen
191 decrement Twenty = Nineteen
192 decrement TwentyOne = Twenty
193 decrement TwentyTwo = TwentyOne
194 decrement TwentyThree = TwentyTwo
195 decrement TwentyFour = TwentyThree
196 decrement TwentyFive = TwentyFour
197 decrement TwentySix = TwentyFive
198 decrement TwentySeven = TwentySix
199 decrement TwentyEight = TwentySeven
200 decrement TwentyNine = TwentyEight
201 decrement Thirty = TwentyNine
202 decrement ThirtyOne = Thirty
203 decrement ThirtyTwo = ThirtyOne