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
159 maskbits_from_string :: String -> Maybe Maskbits
160 maskbits_from_string s =
161 case (reads s :: [(Int, String)]) of
163 x:_ -> maskbits_from_int (fst x)
167 decrement :: Maskbits -> Maskbits
168 decrement Zero = Zero
171 decrement Three = Two
172 decrement Four = Three
173 decrement Five = Four
175 decrement Seven = Six
176 decrement Eight = Seven
177 decrement Nine = Eight
179 decrement Eleven = Ten
180 decrement Twelve = Eleven
181 decrement Thirteen = Twelve
182 decrement Fourteen = Thirteen
183 decrement Fifteen = Fourteen
184 decrement Sixteen = Fifteen
185 decrement Seventeen = Sixteen
186 decrement Eighteen = Seventeen
187 decrement Nineteen = Eighteen
188 decrement Twenty = Nineteen
189 decrement TwentyOne = Twenty
190 decrement TwentyTwo = TwentyOne
191 decrement TwentyThree = TwentyTwo
192 decrement TwentyFour = TwentyThree
193 decrement TwentyFive = TwentyFour
194 decrement TwentySix = TwentyFive
195 decrement TwentySeven = TwentySix
196 decrement TwentyEight = TwentySeven
197 decrement TwentyNine = TwentyEight
198 decrement Thirty = TwentyNine
199 decrement ThirtyOne = Thirty
200 decrement ThirtyTwo = ThirtyOne