]> gitweb.michael.orlitzky.com - hath.git/blob - src/Maskbits.hs
5eb7649972a29b18e760c693351258a7bed8330b
[hath.git] / src / Maskbits.hs
1 module Maskbits(
2 Maskbits(..),
3 )
4 where
5
6 import Test.QuickCheck (Arbitrary(..), elements)
7
8
9 -- | A type representing the number of bits in a CIDR netmask.
10 data Maskbits =
11 Zero
12 | One
13 | Two
14 | Three
15 | Four
16 | Five
17 | Six
18 | Seven
19 | Eight
20 | Nine
21 | Ten
22 | Eleven
23 | Twelve
24 | Thirteen
25 | Fourteen
26 | Fifteen
27 | Sixteen
28 | Seventeen
29 | Eighteen
30 | Nineteen
31 | Twenty
32 | TwentyOne
33 | TwentyTwo
34 | TwentyThree
35 | TwentyFour
36 | TwentyFive
37 | TwentySix
38 | TwentySeven
39 | TwentyEight
40 | TwentyNine
41 | Thirty
42 | ThirtyOne
43 | ThirtyTwo
44 deriving (Enum, Eq, Ord)
45
46
47 instance Show Maskbits where
48 show Zero = "0"
49 show One = "1"
50 show Two = "2"
51 show Three = "3"
52 show Four = "4"
53 show Five = "5"
54 show Six = "6"
55 show Seven = "7"
56 show Eight = "8"
57 show Nine = "9"
58 show Ten = "10"
59 show Eleven = "11"
60 show Twelve = "12"
61 show Thirteen = "13"
62 show Fourteen = "14"
63 show Fifteen = "15"
64 show Sixteen = "16"
65 show Seventeen = "17"
66 show Eighteen = "18"
67 show Nineteen = "19"
68 show Twenty = "20"
69 show TwentyOne = "21"
70 show TwentyTwo = "22"
71 show TwentyThree = "23"
72 show TwentyFour = "24"
73 show TwentyFive = "25"
74 show TwentySix = "26"
75 show TwentySeven = "27"
76 show TwentyEight = "28"
77 show TwentyNine = "29"
78 show Thirty = "30"
79 show ThirtyOne = "31"
80 show ThirtyTwo = "32"
81
82
83 instance Arbitrary Maskbits where
84 arbitrary =
85 elements [ Zero,
86 One,
87 Two,
88 Three,
89 Four,
90 Five,
91 Six,
92 Seven,
93 Eight,
94 Nine,
95 Ten,
96 Eleven,
97 Twelve,
98 Thirteen,
99 Fourteen,
100 Fifteen,
101 Sixteen,
102 Seventeen,
103 Eighteen,
104 Nineteen,
105 Twenty,
106 TwentyOne,
107 TwentyTwo,
108 TwentyThree,
109 TwentyFour,
110 TwentyFive,
111 TwentySix,
112 TwentySeven,
113 TwentyEight,
114 TwentyNine,
115 Thirty,
116 ThirtyOne,
117 ThirtyTwo ]
118
119
120 instance Read Maskbits where
121 readsPrec _ s =
122 case (reads s :: [(Int, String)]) of
123 [] -> []
124 (x,leftover):_ -> go x leftover
125 where
126 go :: Int -> String -> [(Maskbits, String)]
127 go x' leftover'
128 | x' < minBound || x' > maxBound = []
129 | otherwise = [(toEnum x', leftover')]