    module Network.Mail.SMTP.Types (
        Command(..),
        ReplyCode,
        Response(..),

        -- * Auth types (re-exports)
        UserName,
        Password,
        AuthType(..),

        -- * "Network.Mail.Mime" types (re-exports)
        Address(..),
    ) where

    import Network.Mail.SMTP.Auth

    import Data.ByteString (ByteString)
    import Network.Mail.Mime

    data Command
        = HELO ByteString
        | EHLO ByteString
        | MAIL ByteString
        | RCPT ByteString
        | DATA ByteString
        | EXPN ByteString
        | VRFY ByteString
        | HELP ByteString
        | AUTH AuthType UserName Password
        | NOOP
        | RSET
        | QUIT
        | STARTTLS
        deriving (Int -> Command -> ShowS
    [Command] -> ShowS
    Command -> String
    (Int -> Command -> ShowS)
    -> (Command -> String) -> ([Command] -> ShowS) -> Show Command
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Command -> ShowS
    showsPrec :: Int -> Command -> ShowS
    $cshow :: Command -> String
    show :: Command -> String
    $cshowList :: [Command] -> ShowS
    showList :: [Command] -> ShowS
    Show, Command -> Command -> Bool
    (Command -> Command -> Bool)
    -> (Command -> Command -> Bool) -> Eq Command
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Command -> Command -> Bool
    == :: Command -> Command -> Bool
    $c/= :: Command -> Command -> Bool
    /= :: Command -> Command -> Bool
    Eq)

    type ReplyCode = Int

    data Response
        = Ok
        | SystemStatus
        | HelpMessage
        | ServiceReady
        | ServiceClosing
        | UserNotLocal
        | CannotVerify
        | StartMailInput
        | ServiceNotAvailable
        | MailboxUnavailable
        | ErrorInProcessing
        | InsufficientSystemStorage
        | SyntaxError
        | ParameterError
        | CommandNotImplemented
        | BadSequence
        | ParameterNotImplemented
        | MailboxUnavailableError
        | UserNotLocalError
        | ExceededStorage
        | MailboxNotAllowed
        | TransactionFailed
        deriving (Int -> Response -> ShowS
    [Response] -> ShowS
    Response -> String
    (Int -> Response -> ShowS)
    -> (Response -> String) -> ([Response] -> ShowS) -> Show Response
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Response -> ShowS
    showsPrec :: Int -> Response -> ShowS
    $cshow :: Response -> String
    show :: Response -> String
    $cshowList :: [Response] -> ShowS
    showList :: [Response] -> ShowS
    Show, Response -> Response -> Bool
    (Response -> Response -> Bool)
    -> (Response -> Response -> Bool) -> Eq Response
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Response -> Response -> Bool
    == :: Response -> Response -> Bool
    $c/= :: Response -> Response -> Bool
    /= :: Response -> Response -> Bool
    Eq)