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,
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 -> Maskbits
124 maskbits_from_int 0 = Zero
125 maskbits_from_int 1 = One
126 maskbits_from_int 2 = Two
127 maskbits_from_int 3 = Three
128 maskbits_from_int 4 = Four
129 maskbits_from_int 5 = Five
130 maskbits_from_int 6 = Six
131 maskbits_from_int 7 = Seven
132 maskbits_from_int 8 = Eight
133 maskbits_from_int 9 = Nine
134 maskbits_from_int 10 = Ten
135 maskbits_from_int 11 = Eleven
136 maskbits_from_int 12 = Twelve
137 maskbits_from_int 13 = Thirteen
138 maskbits_from_int 14 = Fourteen
139 maskbits_from_int 15 = Fifteen
140 maskbits_from_int 16 = Sixteen
141 maskbits_from_int 17 = Seventeen
142 maskbits_from_int 18 = Eighteen
143 maskbits_from_int 19 = Nineteen
144 maskbits_from_int 20 = Twenty
145 maskbits_from_int 21 = TwentyOne
146 maskbits_from_int 22 = TwentyTwo
147 maskbits_from_int 23 = TwentyThree
148 maskbits_from_int 24 = TwentyFour
149 maskbits_from_int 25 = TwentyFive
150 maskbits_from_int 26 = TwentySix
151 maskbits_from_int 27 = TwentySeven
152 maskbits_from_int 28 = TwentyEight
153 maskbits_from_int 29 = TwentyNine
154 maskbits_from_int 30 = Thirty
155 maskbits_from_int 31 = ThirtyOne
156 maskbits_from_int 32 = ThirtyTwo
157 maskbits_from_int _ = None
160 maskbits_from_string :: String -> Maskbits
161 maskbits_from_string s =
162 case (reads s :: [(Int, String)]) of
164 x:_ -> maskbits_from_int (fst x)
168 decrement :: Maskbits -> Maskbits
169 decrement None = None
170 decrement Zero = None
173 decrement Three = Two
174 decrement Four = Three
175 decrement Five = Four
177 decrement Seven = Six
178 decrement Eight = Seven
179 decrement Nine = Eight
181 decrement Eleven = Ten
182 decrement Twelve = Eleven
183 decrement Thirteen = Twelve
184 decrement Fourteen = Thirteen
185 decrement Fifteen = Fourteen
186 decrement Sixteen = Fifteen
187 decrement Seventeen = Sixteen
188 decrement Eighteen = Seventeen
189 decrement Nineteen = Eighteen
190 decrement Twenty = Nineteen
191 decrement TwentyOne = Twenty
192 decrement TwentyTwo = TwentyOne
193 decrement TwentyThree = TwentyTwo
194 decrement TwentyFour = TwentyThree
195 decrement TwentyFive = TwentyFour
196 decrement TwentySix = TwentyFive
197 decrement TwentySeven = TwentySix
198 decrement TwentyEight = TwentySeven
199 decrement TwentyNine = TwentyEight
200 decrement Thirty = TwentyNine
201 decrement ThirtyOne = Thirty
202 decrement ThirtyTwo = ThirtyOne