-ipv4address_from_string :: String -> IPv4Address
-ipv4address_from_string s
- | length s < 32 = default_ipv4address
- | otherwise = IPv4Address (Octet a1 a2 a3 a4 a5 a6 a7 a8) (Octet a9 a10 a11 a12 a13 a14 a15 a16)(Octet a17 a18 a19 a20 a21 a22 a23 a24) (Octet a25 a26 a27 a28 a29 a30 a31 a32)
- where
- a1 = bit_from_char (s !! 0)
- a2 = bit_from_char (s !! 1)
- a3 = bit_from_char (s !! 2)
- a4 = bit_from_char (s !! 3)
- a5 = bit_from_char (s !! 4)
- a6 = bit_from_char (s !! 5)
- a7 = bit_from_char (s !! 6)
- a8 = bit_from_char (s !! 7)
- a9 = bit_from_char (s !! 8)
- a10 = bit_from_char (s !! 9)
- a11 = bit_from_char (s !! 10)
- a12 = bit_from_char (s !! 11)
- a13 = bit_from_char (s !! 12)
- a14 = bit_from_char (s !! 13)
- a15 = bit_from_char (s !! 14)
- a16 = bit_from_char (s !! 15)
- a17 = bit_from_char (s !! 16)
- a18 = bit_from_char (s !! 17)
- a19 = bit_from_char (s !! 18)
- a20 = bit_from_char (s !! 19)
- a21 = bit_from_char (s !! 20)
- a22 = bit_from_char (s !! 21)
- a23 = bit_from_char (s !! 22)
- a24 = bit_from_char (s !! 23)
- a25 = bit_from_char (s !! 24)
- a26 = bit_from_char (s !! 25)
- a27 = bit_from_char (s !! 26)
- a28 = bit_from_char (s !! 27)
- a29 = bit_from_char (s !! 28)
- a30 = bit_from_char (s !! 29)
- a31 = bit_from_char (s !! 30)
- a32 = bit_from_char (s !! 31)
+ coarbitrary _ = variant 0
+
+
+
+instance Maskable IPv4Address where
+ apply_mask _ Maskbits.None = IPv4Address.None
+ apply_mask addr mask
+ | mask == ThirtyTwo = ipv4address_from_octets oct1 oct2 oct3 oct4
+ | mask == ThirtyOne = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 Seven)
+ | mask == Thirty = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 Six)
+ | mask == TwentyNine = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 Five)
+ | mask == TwentyEight = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 Four)
+ | mask == TwentySeven = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 Three)
+ | mask == TwentySix = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 Two)
+ | mask == TwentyFive = ipv4address_from_octets oct1 oct2 oct3 (apply_mask oct4 One)
+ | mask == TwentyFour = ipv4address_from_octets oct1 oct2 oct3 (min_octet)
+ | mask == TwentyThree = ipv4address_from_octets oct1 oct2 (apply_mask oct3 Seven) (min_octet)
+ | mask == TwentyTwo = ipv4address_from_octets oct1 oct2 (apply_mask oct3 Six) (min_octet)
+ | mask == TwentyOne = ipv4address_from_octets oct1 oct2 (apply_mask oct3 Five) (min_octet)
+ | mask == Twenty = ipv4address_from_octets oct1 oct2 (apply_mask oct3 Four) (min_octet)
+ | mask == Nineteen = ipv4address_from_octets oct1 oct2 (apply_mask oct3 Three) (min_octet)
+ | mask == Eighteen = ipv4address_from_octets oct1 oct2 (apply_mask oct3 Two) (min_octet)
+ | mask == Seventeen = ipv4address_from_octets oct1 oct2 (apply_mask oct3 One) (min_octet)
+ | mask == Sixteen = ipv4address_from_octets oct1 oct2 (min_octet) (min_octet)
+ | mask == Fifteen = ipv4address_from_octets oct1 (apply_mask oct2 Seven) (min_octet) (min_octet)
+ | mask == Fourteen = ipv4address_from_octets oct1 (apply_mask oct2 Six) (min_octet) (min_octet)
+ | mask == Thirteen = ipv4address_from_octets oct1 (apply_mask oct2 Five) (min_octet) (min_octet)
+ | mask == Twelve = ipv4address_from_octets oct1 (apply_mask oct2 Four) (min_octet) (min_octet)
+ | mask == Eleven = ipv4address_from_octets oct1 (apply_mask oct2 Three) (min_octet) (min_octet)
+ | mask == Ten = ipv4address_from_octets oct1 (apply_mask oct2 Two) (min_octet) (min_octet)
+ | mask == Nine = ipv4address_from_octets oct1 (apply_mask oct2 One) (min_octet) (min_octet)
+ | mask == Eight = ipv4address_from_octets oct1 (min_octet) (min_octet) (min_octet)
+ | mask == Seven = ipv4address_from_octets (apply_mask oct1 Seven) (min_octet) (min_octet) (min_octet)
+ | mask == Six = ipv4address_from_octets (apply_mask oct1 Six) (min_octet) (min_octet) (min_octet)
+ | mask == Five = ipv4address_from_octets (apply_mask oct1 Five) (min_octet) (min_octet) (min_octet)
+ | mask == Four = ipv4address_from_octets (apply_mask oct1 Four) (min_octet) (min_octet) (min_octet)
+ | mask == Three = ipv4address_from_octets (apply_mask oct1 Three) (min_octet) (min_octet) (min_octet)
+ | mask == Two = ipv4address_from_octets (apply_mask oct1 Two) (min_octet) (min_octet) (min_octet)
+ | mask == One = ipv4address_from_octets (apply_mask oct1 One) (min_octet) (min_octet) (min_octet)
+ | mask == Zero = ipv4address_from_octets (min_octet) (min_octet) (min_octet) (min_octet)
+ | otherwise = IPv4Address.None
+ where
+ oct1 = (octet1 addr)
+ oct2 = (octet2 addr)
+ oct3 = (octet3 addr)
+ oct4 = (octet4 addr)
+
+
+-- We don't export our constructor so this function is the only
+-- way to construct an address from octets. As a result, we can
+-- return IPv4Address.None in response to being passed one of more
+-- Octet.None octets.
+ipv4address_from_octets :: Octet -> Octet -> Octet -> Octet -> IPv4Address
+ipv4address_from_octets oct1 oct2 oct3 oct4
+ | or [oct1 == Octet.None,
+ oct2 == Octet.None,
+ oct3 == Octet.None,
+ oct4 == Octet.None] = IPv4Address.None
+ | otherwise = IPv4Address oct1 oct2 oct3 oct4