{-|
  Data structures to express IPv4, IPv6 and IP range.
-}
module Data.IP (
  -- * IP data
    IP (..)
  -- ** IPv4
  , IPv4
  , toIPv4, toIPv4w
  , fromIPv4, fromIPv4w
  , fromHostAddress, toHostAddress
  -- ** IPv6
  , IPv6
  , toIPv6, toIPv6b, toIPv6w
  , fromIPv6, fromIPv6b, fromIPv6w
  , fromHostAddress6, toHostAddress6
  -- ** Converters
  , ipv4ToIPv6
  , fromSockAddr
  , toSockAddr
  -- * IP range data
  , IPRange (..)
  , AddrRange (addr, mask, mlen)
  -- * Address class
  , Addr (..)
  , makeAddrRange, (>:>), isMatchedTo, addrRangePair
  , ipv4RangeToIPv6
  ) where

import Data.IP.Addr
import Data.IP.Op
import Data.IP.Range