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