-- | A thread-safe DNS library for both clients and servers written
--   in pure Haskell.
--   The Network.DNS module re-exports all other exposed modules for
--   convenience.
--   Applications will most likely use the high-level interface, while
--   library/daemon authors may need to use the lower-level one.
--   EDNS0 and TCP fallback are supported.
--
--   Examples:
--
--   >>> rs <- makeResolvSeed defaultResolvConf
--   >>> withResolver rs $ \resolver -> lookupA resolver "www.mew.org"
--   Right [210.130.207.72]
module Network.DNS (
  -- * High level
    module Network.DNS.Lookup
  -- | This module contains simple functions to
  --   perform various DNS lookups. If you simply want to resolve a
  --   hostname ('lookupA'), or find a domain's MX record
  --   ('lookupMX'), this is the easiest way to do it.

  , module Network.DNS.Resolver
  -- | Resolver related data types.

  , module Network.DNS.Types
  -- | All of the types that the other modules use.

  , module Network.DNS.Utils
  -- | This module contains utility functions used
  --   for processing DNS data.

  -- * Middle level
  , module Network.DNS.LookupRaw
  -- | This provides 'lookup', 'lookupAuth', or 'lookupRaw' functions
  --   for any resource records.

  -- * Low level
  , module Network.DNS.Encode
  -- | Encoding a query or response.

  , module Network.DNS.Decode
  -- | Decoding a qurey or response.

  , module Network.DNS.IO
  -- | Sending and receiving.
) where

import Network.DNS.Decode
import Network.DNS.Encode
import Network.DNS.IO
import Network.DNS.Lookup
import Network.DNS.LookupRaw
import Network.DNS.Resolver
import Network.DNS.Types
import Network.DNS.Utils