{-# 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 (Int -> EMailAddress -> ShowS
[EMailAddress] -> ShowS
EMailAddress -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EMailAddress] -> ShowS
$cshowList :: [EMailAddress] -> ShowS
show :: EMailAddress -> String
$cshow :: EMailAddress -> String
showsPrec :: Int -> EMailAddress -> ShowS
$cshowsPrec :: Int -> EMailAddress -> ShowS
Show, EMailAddress -> EMailAddress -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EMailAddress -> EMailAddress -> Bool
$c/= :: EMailAddress -> EMailAddress -> Bool
== :: EMailAddress -> EMailAddress -> Bool
$c== :: EMailAddress -> EMailAddress -> Bool
Eq, Eq EMailAddress
EMailAddress -> EMailAddress -> Bool
EMailAddress -> EMailAddress -> Ordering
EMailAddress -> EMailAddress -> EMailAddress
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: EMailAddress -> EMailAddress -> EMailAddress
$cmin :: EMailAddress -> EMailAddress -> EMailAddress
max :: EMailAddress -> EMailAddress -> EMailAddress
$cmax :: EMailAddress -> EMailAddress -> EMailAddress
>= :: EMailAddress -> EMailAddress -> Bool
$c>= :: EMailAddress -> EMailAddress -> Bool
> :: EMailAddress -> EMailAddress -> Bool
$c> :: EMailAddress -> EMailAddress -> Bool
<= :: EMailAddress -> EMailAddress -> Bool
$c<= :: EMailAddress -> EMailAddress -> Bool
< :: EMailAddress -> EMailAddress -> Bool
$c< :: EMailAddress -> EMailAddress -> Bool
compare :: EMailAddress -> EMailAddress -> Ordering
$ccompare :: EMailAddress -> EMailAddress -> Ordering
Ord, forall x. Rep EMailAddress x -> EMailAddress
forall x. EMailAddress -> Rep EMailAddress x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep EMailAddress x -> EMailAddress
$cfrom :: forall x. EMailAddress -> Rep EMailAddress x
Generic, Eq EMailAddress
Int -> EMailAddress -> Int
EMailAddress -> Int
forall a. Eq a -> (Int -> a -> Int) -> (a -> Int) -> Hashable a
hash :: EMailAddress -> Int
$chash :: EMailAddress -> Int
hashWithSalt :: Int -> EMailAddress -> Int
$chashWithSalt :: Int -> EMailAddress -> Int
Hashable, Get EMailAddress
[EMailAddress] -> Put
EMailAddress -> Put
forall t. (t -> Put) -> Get t -> ([t] -> Put) -> Binary t
putList :: [EMailAddress] -> Put
$cputList :: [EMailAddress] -> Put
get :: Get EMailAddress
$cget :: Get EMailAddress
put :: EMailAddress -> Put
$cput :: EMailAddress -> Put
Binary, EMailAddress -> ()
forall a. (a -> ()) -> NFData a
rnf :: EMailAddress -> ()
$crnf :: EMailAddress -> ()
NFData)
mkEMailAddress :: String -> Maybe EMailAddress
mkEMailAddress :: String -> Maybe EMailAddress
mkEMailAddress = forall (m :: * -> *) input a.
(MonadFail m, Stream input m Char, HasParser a) =>
String -> input -> m a
parseM String
"e-mail address"
unEMailAddress :: EMailAddress -> String
unEMailAddress :: EMailAddress -> String
unEMailAddress (EMailAddress String
str) = String
str
instance HasParser EMailAddress where
parser :: forall st input (m :: * -> *). CharParser st input m EMailAddress
parser = String -> EMailAddress
EMailAddress forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m String
addr_spec
instance IsString EMailAddress where
fromString :: String -> EMailAddress
fromString = forall input a.
(Stream input Identity Char, HasParser a) =>
String -> input -> a
parse String
"e-mail address"
instance Pretty EMailAddress where
pPrint :: EMailAddress -> Doc
pPrint = String -> Doc
Pretty.text forall b c a. (b -> c) -> (a -> b) -> a -> c
. EMailAddress -> String
unEMailAddress