Safe Haskell | None |
---|---|
Language | Haskell2010 |
An IP data type representing either an IPv4 address or
an IPv6 address. The user can think of this
as though it were a sum type. However, to minimize indirections,
it is actually implemented as an IPv6
address, with IPv4
addresses being represented as an IPv4-mapped IPv6 addresses:
+---------+---------+--------------+ | 80 bits | 16 bits | 32 bits | +---------+---------+--------------+ | 00...00 | FFFF | IPv4 address | +---------+---------+--------------+
All functions and instance methods that deal with textual conversion
will encode an IP
using either dot-decimal notation (for IPv4) or
RFC 5952 (for IPv6). They will decode an IP
from either format
as well. The Show
instance presents an address in as valid haskell code
that resembles the formatted address:
>>>
decode "192.168.3.100"
Just (ipv4 192 168 3 100)>>>
decode "A3F5:12:F26::1466:8B91"
Just (ipv6 0xa3f5 0x0012 0x0f26 0x0000 0x0000 0x0000 0x1466 0x8b91)
- case_ :: (IPv4 -> a) -> (IPv6 -> a) -> IP -> a
- ipv4 :: Word8 -> Word8 -> Word8 -> Word8 -> IP
- ipv6 :: Word16 -> Word16 -> Word16 -> Word16 -> Word16 -> Word16 -> Word16 -> Word16 -> IP
- fromIPv4 :: IPv4 -> IP
- fromIPv6 :: IPv6 -> IP
- encode :: IP -> Text
- decode :: Text -> Maybe IP
- print :: IP -> IO ()
- newtype IP = IP {}
Pattern Matching
Construction
ipv4 :: Word8 -> Word8 -> Word8 -> Word8 -> IP Source #
Construct an IP
address from the four octets of
an IPv4 address.
ipv6 :: Word16 -> Word16 -> Word16 -> Word16 -> Word16 -> Word16 -> Word16 -> Word16 -> IP Source #
Construct an IP
address from the eight 16-bit
chunks of an IPv6 address.
Textual Conversion
Text
Printing
Types
A 32-bit IPv4
address or a 128-bit IPv6
address. Internally, this
is just represented as an IPv6
address. The functions provided
in Net.IP
help simulate constructing and pattern matching on values
of this type. All functions and typeclass methods that convert
IP
values to text will display it as an IPv4
address if possible.