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