+-- 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
+
+