{-# 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 ) -- | -- -- >>> mkEMailAddress " accept . full (rfc822) . syntax @ example . org " -- Just (EMailAddress "accept.full.syntax@example.org") -- -- >>> mkEMailAddress "@this@is@not@good@" -- Nothing -- -- >>> prettyShow (fromString "joe @ example.net" :: EMailAddress) -- "joe@example.net" newtype EMailAddress = EMailAddress String deriving (Show, Eq, Ord, Generic, Hashable, Binary, NFData) -- | Constructor function for e-mail addresses. Returns 'Nothing' if the input -- is syntactically invalid. mkEMailAddress :: String -> Maybe EMailAddress mkEMailAddress = parseM "e-mail address" -- | Accessor function for the underlying path of strings. 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