{-# LANGUAGE DeriveGeneric, GeneralizedNewtypeDeriving #-}
module OpenSuse.Types.EMailAddress
( EMailAddress, mkEMailAddress, unEMailAddress
)
where
import OpenSuse.Prelude
import OpenSuse.Prelude.PrettyPrinting as Pretty
import Text.Parsec.Rfc2822 ( addr_spec )
newtype EMailAddress = EMailAddress String
deriving (Show, Eq, Ord, Generic, Hashable, Binary, NFData)
mkEMailAddress :: String -> Maybe EMailAddress
mkEMailAddress = parseM "e-mail address"
unEMailAddress :: EMailAddress -> String
unEMailAddress (EMailAddress str) = str
instance HasParser EMailAddress where
parser = EMailAddress <$> addr_spec
instance IsString EMailAddress where
fromString = parse "e-mail address"
instance Pretty EMailAddress where
pPrint = Pretty.text . unEMailAddress