module Maskbits ( Maskbits(..), maskbits_from_string ) where -- A type representing the number of bits in a CIDR netmask. data Maskbits = None | Zero | One | Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten | Eleven | Twelve | Thirteen | Fourteen | Fifteen | Sixteen | Seventeen | Eighteen | Nineteen | Twenty | TwentyOne | TwentyTwo | TwentyThree | TwentyFour | TwentyFive | TwentySix | TwentySeven | TwentyEight | TwentyNine | Thirty | ThirtyOne | ThirtyTwo deriving (Eq, Ord, Show) -- There are only 32 bits in an IPv4 address, so there -- can't be more bits than that in the mask. maskbits_from_int :: Int -> Maskbits maskbits_from_int 0 = Zero maskbits_from_int 1 = One maskbits_from_int 2 = Two maskbits_from_int 3 = Three maskbits_from_int 4 = Four maskbits_from_int 5 = Five maskbits_from_int 6 = Six maskbits_from_int 7 = Seven maskbits_from_int 8 = Eight maskbits_from_int 9 = Nine maskbits_from_int 10 = Ten maskbits_from_int 11 = Eleven maskbits_from_int 12 = Twelve maskbits_from_int 13 = Thirteen maskbits_from_int 14 = Fourteen maskbits_from_int 15 = Fifteen maskbits_from_int 16 = Sixteen maskbits_from_int 17 = Seventeen maskbits_from_int 18 = Eighteen maskbits_from_int 19 = Nineteen maskbits_from_int 20 = Twenty maskbits_from_int 21 = TwentyOne maskbits_from_int 22 = TwentyTwo maskbits_from_int 23 = TwentyThree maskbits_from_int 24 = TwentyFour maskbits_from_int 25 = TwentyFive maskbits_from_int 26 = TwentySix maskbits_from_int 27 = TwentySeven maskbits_from_int 28 = TwentyEight maskbits_from_int 29 = TwentyNine maskbits_from_int 30 = Thirty maskbits_from_int 31 = ThirtyOne maskbits_from_int 32 = ThirtyTwo maskbits_from_int _ = None maskbits_from_string :: String -> Maskbits maskbits_from_string s = case (reads s :: [(Int, String)]) of [] -> None x:_ -> maskbits_from_int (fst x)