{-|
Module      : Text.EmailAddress
Description : Wrapper around email-validate adding additional instances.
Copyright   : (c) Dennis Gosnell, 2016
License     : BSD3

This module is a wrapper around
<https://hackage.haskell.org/package/email-validate-2.2.0/docs/Text-Email-Validate.html Text.Email.Validate>
from <https://hackage.haskell.org/package/email-validate email-validate>.

This module exports 'EmailAddress', a newtype wrapper around
<https://hackage.haskell.org/package/email-validate/docs/Text-Email-Validate.html#t:EmailAddress Text.Email.Validate.EmailAddress>.
Additional instances are defined for our
new 'EmailAddress', including 'Data.Aeson.ToJSON' and 'Data.Aeson.FromJSON'. This is done so that no
orphan instances need to be used.

If you would like additional instances to be defined, please send a
<https://github.com/cdepillabout/emailaddress pull request>.  Additional
instances will be accepted for any typeclass from any package available on
stackage.
-}

module Text.EmailAddress
    ( -- * Data Type
      EmailAddress(EmailAddress, unEmailAddress)
      -- * Create EmailAddress
    , emailAddress
    , validate
    , emailAddressFromText
    , validateFromText
    , emailAddressFromString
    , validateFromString
      -- * Check validity
    , isValid
      -- * Convert to Text
    , toText
      -- * Convert back to ByteString
    , toByteString
    , localPart
    , domainPart
      -- * Helper functions
    , canonicalizeEmail
      -- * Unsafe creation
    , unsafeEmailAddress
    ) where

import Text.EmailAddress.Internal
       (EmailAddress(EmailAddress, unEmailAddress), canonicalizeEmail,
        domainPart, emailAddress, emailAddressFromString,
        emailAddressFromText, isValid, localPart, toByteString, toText,
        validate, validateFromString, validateFromText, unsafeEmailAddress)