GPX-0.4.1: Data/Geo/GPX/PersonType.hs
-- | Complex Type: @personType@ <http://www.topografix.com/GPX/1/1/#type_personType>
module Data.Geo.GPX.PersonType(
PersonType,
personType
) where
import Data.Geo.GPX.EmailType
import Data.Geo.GPX.LinkType
import Data.Geo.GPX.Accessor.Name
import Data.Geo.GPX.Accessor.Email
import Data.Geo.GPX.Accessor.Link
import Text.XML.HXT.Arrow
data PersonType = PersonType (Maybe String) (Maybe EmailType) (Maybe LinkType)
deriving (Eq, Show)
personType :: Maybe String -- ^ The name.
-> Maybe EmailType -- ^ The email.
-> Maybe LinkType -- ^ The link.
-> PersonType
personType = PersonType
instance XmlPickler PersonType where
xpickle = xpWrap (\(name', email', link') -> personType name' email' link', \(PersonType name' email' link') -> (name', email', link')) (xpTriple
(xpOption (xpElem "name" xpText))
(xpOption (xpElem "email" xpickle))
(xpOption (xpElem "link" xpickle)))
instance Name PersonType where
name (PersonType x _ _) = x
setName a (PersonType _ b c) = personType a b c
instance Email PersonType where
email (PersonType _ x _) = x
setEmail b (PersonType a _ c) = personType a b c
instance Link PersonType where
link (PersonType _ _ x) = x
setLink c (PersonType a b _) = personType a b c