module Data.Geo.OSM.Children
(
Children
, osmUser
, osmGpxFile
, osmApi
, osmChangeset
, osmNodeWayRelation
, foldChildren
) where
import Text.XML.HXT.Arrow.Pickle
import Data.Geo.OSM.User
import Data.Geo.OSM.Preferences
import Data.Geo.OSM.GpxFile
import Data.Geo.OSM.Api
import Data.Geo.OSM.Changeset
import Data.Geo.OSM.NodeWayRelation
data Children =
User User
| Preferences Preferences
| GpxFile GpxFile
| Api Api
| Changeset Changeset
| NWR [NodeWayRelation]
deriving Eq
instance XmlPickler Children where
xpickle =
xpAlt (\r -> case r of
User _ -> 0
Preferences _ -> 1
GpxFile _ -> 2
Api _ -> 3
Changeset _ -> 4
NWR _ -> 5) [xpWrap (User, \(User u) -> u) xpickle,
xpWrap (Preferences, \(Preferences p) -> p) xpickle,
xpWrap (GpxFile, \(GpxFile f) -> f) xpickle,
xpWrap (Api, \(Api a) -> a) xpickle,
xpWrap (Changeset, \(Changeset c) -> c) xpickle,
xpWrap (NWR, \(NWR k) -> k) (xpList xpickle)]
instance Show Children where
show =
showPickled []
osmUser ::
User
-> Children
osmUser =
User
osmGpxFile ::
GpxFile
-> Children
osmGpxFile =
GpxFile
osmApi ::
Api
-> Children
osmApi =
Api
osmChangeset ::
Changeset
-> Children
osmChangeset =
Changeset
osmNodeWayRelation ::
[NodeWayRelation]
-> Children
osmNodeWayRelation =
NWR
foldChildren ::
(User -> a)
-> (Preferences -> a)
-> (GpxFile -> a)
-> (Api -> a)
-> (Changeset -> a)
-> ([NodeWayRelation] -> a)
-> Children
-> a
foldChildren z _ _ _ _ _ (User u) =
z u
foldChildren _ z _ _ _ _ (Preferences p) =
z p
foldChildren _ _ z _ _ _ (GpxFile f) =
z f
foldChildren _ _ _ z _ _ (Api a) =
z a
foldChildren _ _ _ _ z _ (Changeset c) =
z c
foldChildren _ _ _ _ _ z (NWR k) =
z k