OSM 0.2 → 0.3
raw patch · 79 files changed
+903/−903 lines, 79 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Geo.OSM.Accessor.BoundOrs: boundOrs :: (BoundOrs a) => a -> x -> (Bound -> x) -> (Bounds -> x) -> x
- Geo.OSM.Accessor.BoundOrs: class BoundOrs a
- Geo.OSM.Accessor.Box: box :: (Box a) => a -> String
- Geo.OSM.Accessor.Box: class Box a
- Geo.OSM.Accessor.Changeset: changeset :: (Changeset a) => a -> Maybe String
- Geo.OSM.Accessor.Changeset: class Changeset a
- Geo.OSM.Accessor.Generator: class Generator a
- Geo.OSM.Accessor.Generator: generator :: (Generator a) => a -> Maybe String
- Geo.OSM.Accessor.Id: class Id a
- Geo.OSM.Accessor.Id: id :: (Id a) => a -> String
- Geo.OSM.Accessor.K: class K a
- Geo.OSM.Accessor.K: k :: (K a) => a -> String
- Geo.OSM.Accessor.Lat: class Lat a
- Geo.OSM.Accessor.Lat: lat :: (Lat a) => a -> String
- Geo.OSM.Accessor.Lon: class Lon a
- Geo.OSM.Accessor.Lon: lon :: (Lon a) => a -> String
- Geo.OSM.Accessor.Maxlat: class Maxlat a
- Geo.OSM.Accessor.Maxlat: maxlat :: (Maxlat a) => a -> String
- Geo.OSM.Accessor.Maxlon: class Maxlon a
- Geo.OSM.Accessor.Maxlon: maxlon :: (Maxlon a) => a -> String
- Geo.OSM.Accessor.Members: class Members a
- Geo.OSM.Accessor.Members: members :: (Members a) => a -> [Member]
- Geo.OSM.Accessor.Minlat: class Minlat a
- Geo.OSM.Accessor.Minlat: minlat :: (Minlat a) => a -> String
- Geo.OSM.Accessor.Minlon: class Minlon a
- Geo.OSM.Accessor.Minlon: minlon :: (Minlon a) => a -> String
- Geo.OSM.Accessor.Mtype: class Mtype a
- Geo.OSM.Accessor.Mtype: mtype :: (Mtype a) => a -> MemberType
- Geo.OSM.Accessor.Nds: class Nds a
- Geo.OSM.Accessor.Nds: nds :: (Nds a) => a -> [Nd]
- Geo.OSM.Accessor.NodeWayRelations: class NodeWayRelations a
- Geo.OSM.Accessor.NodeWayRelations: nodes :: (NodeWayRelations a) => a -> [Node]
- Geo.OSM.Accessor.NodeWayRelations: nwrs :: (NodeWayRelations a) => a -> [NodeWayRelation]
- Geo.OSM.Accessor.NodeWayRelations: relations :: (NodeWayRelations a) => a -> [Relation]
- Geo.OSM.Accessor.NodeWayRelations: ways :: (NodeWayRelations a) => a -> [Way]
- Geo.OSM.Accessor.Origin: class Origin a
- Geo.OSM.Accessor.Origin: origin :: (Origin a) => a -> Maybe String
- Geo.OSM.Accessor.Ref: class Ref a
- Geo.OSM.Accessor.Ref: ref :: (Ref a) => a -> String
- Geo.OSM.Accessor.Role: class Role a
- Geo.OSM.Accessor.Role: role :: (Role a) => a -> String
- Geo.OSM.Accessor.Tags: class Tags a
- Geo.OSM.Accessor.Tags: hasTagValue :: (Tags a) => String -> String -> a -> Bool
- Geo.OSM.Accessor.Tags: tagMap :: (Tags a) => a -> Map String String
- Geo.OSM.Accessor.Tags: tags :: (Tags a) => a -> [Tag]
- Geo.OSM.Accessor.Timestamp: class Timestamp a
- Geo.OSM.Accessor.Timestamp: timestamp :: (Timestamp a) => a -> Maybe String
- Geo.OSM.Accessor.Uid: class Uid a
- Geo.OSM.Accessor.Uid: uid :: (Uid a) => a -> Maybe String
- Geo.OSM.Accessor.User: class User a
- Geo.OSM.Accessor.User: user :: (User a) => a -> Maybe String
- Geo.OSM.Accessor.V: class V a
- Geo.OSM.Accessor.V: v :: (V a) => a -> String
- Geo.OSM.Accessor.Version: class Version a
- Geo.OSM.Accessor.Version: version :: (Version a) => a -> String
- Geo.OSM.Accessor.Visible: class Visible a
- Geo.OSM.Accessor.Visible: visible :: (Visible a) => a -> Bool
- Geo.OSM.Bound: bound :: String -> Maybe String -> Bound
- Geo.OSM.Bound: data Bound
- Geo.OSM.Bound: instance Box Bound
- Geo.OSM.Bound: instance Eq Bound
- Geo.OSM.Bound: instance Origin Bound
- Geo.OSM.Bound: instance Show Bound
- Geo.OSM.Bound: instance XmlPickler Bound
- Geo.OSM.Bounds: bounds :: String -> String -> String -> String -> Maybe String -> Bounds
- Geo.OSM.Bounds: data Bounds
- Geo.OSM.Bounds: instance Eq Bounds
- Geo.OSM.Bounds: instance Maxlat Bounds
- Geo.OSM.Bounds: instance Maxlon Bounds
- Geo.OSM.Bounds: instance Minlat Bounds
- Geo.OSM.Bounds: instance Minlon Bounds
- Geo.OSM.Bounds: instance Origin Bounds
- Geo.OSM.Bounds: instance Show Bounds
- Geo.OSM.Bounds: instance XmlPickler Bounds
- Geo.OSM.Member: data Member
- Geo.OSM.Member: instance Eq Member
- Geo.OSM.Member: instance Mtype Member
- Geo.OSM.Member: instance Ref Member
- Geo.OSM.Member: instance Role Member
- Geo.OSM.Member: instance Show Member
- Geo.OSM.Member: instance XmlPickler Member
- Geo.OSM.Member: member :: MemberType -> String -> String -> Member
- Geo.OSM.MemberType: data MemberType
- Geo.OSM.MemberType: foldMemberType :: MemberType -> x -> x -> x -> x
- Geo.OSM.MemberType: instance Eq MemberType
- Geo.OSM.MemberType: instance Show MemberType
- Geo.OSM.MemberType: instance XmlPickler MemberType
- Geo.OSM.MemberType: nodeType :: MemberType
- Geo.OSM.MemberType: relationType :: MemberType
- Geo.OSM.MemberType: wayType :: MemberType
- Geo.OSM.NWRCommon: data NWRCommon
- Geo.OSM.NWRCommon: instance Changeset NWRCommon
- Geo.OSM.NWRCommon: instance Eq NWRCommon
- Geo.OSM.NWRCommon: instance Id NWRCommon
- Geo.OSM.NWRCommon: instance Show NWRCommon
- Geo.OSM.NWRCommon: instance Tags NWRCommon
- Geo.OSM.NWRCommon: instance Timestamp NWRCommon
- Geo.OSM.NWRCommon: instance Uid NWRCommon
- Geo.OSM.NWRCommon: instance User NWRCommon
- Geo.OSM.NWRCommon: instance Visible NWRCommon
- Geo.OSM.NWRCommon: instance XmlPickler NWRCommon
- Geo.OSM.NWRCommon: nwrCommon :: String -> [Tag] -> Maybe String -> Bool -> (Maybe String, Maybe String) -> Maybe String -> NWRCommon
- Geo.OSM.Nd: data Nd
- Geo.OSM.Nd: instance Eq Nd
- Geo.OSM.Nd: instance Ref Nd
- Geo.OSM.Nd: instance Show Nd
- Geo.OSM.Nd: instance XmlPickler Nd
- Geo.OSM.Nd: nd :: String -> Nd
- Geo.OSM.Node: data Node
- Geo.OSM.Node: instance Changeset Node
- Geo.OSM.Node: instance Eq Node
- Geo.OSM.Node: instance Id Node
- Geo.OSM.Node: instance Lat Node
- Geo.OSM.Node: instance Lon Node
- Geo.OSM.Node: instance Show Node
- Geo.OSM.Node: instance Tags Node
- Geo.OSM.Node: instance Timestamp Node
- Geo.OSM.Node: instance Uid Node
- Geo.OSM.Node: instance User Node
- Geo.OSM.Node: instance Visible Node
- Geo.OSM.Node: instance XmlPickler Node
- Geo.OSM.Node: node :: String -> String -> String -> [Tag] -> Maybe String -> Bool -> (Maybe String, Maybe String) -> Maybe String -> Node
- Geo.OSM.NodeWayRelation: data NodeWayRelation
- Geo.OSM.NodeWayRelation: foldNodeWayRelation :: NodeWayRelation -> (Node -> x) -> (Way -> x) -> (Relation -> x) -> x
- Geo.OSM.NodeWayRelation: instance Eq NodeWayRelation
- Geo.OSM.NodeWayRelation: instance Show NodeWayRelation
- Geo.OSM.NodeWayRelation: instance XmlPickler NodeWayRelation
- Geo.OSM.NodeWayRelation: isNode :: NodeWayRelation -> Bool
- Geo.OSM.NodeWayRelation: isRelation :: NodeWayRelation -> Bool
- Geo.OSM.NodeWayRelation: isWay :: NodeWayRelation -> Bool
- Geo.OSM.NodeWayRelation: node' :: Node -> NodeWayRelation
- Geo.OSM.NodeWayRelation: relation' :: Relation -> NodeWayRelation
- Geo.OSM.NodeWayRelation: way' :: Way -> NodeWayRelation
- Geo.OSM.OSM: data OSM
- Geo.OSM.OSM: instance BoundOrs OSM
- Geo.OSM.OSM: instance Eq OSM
- Geo.OSM.OSM: instance Generator OSM
- Geo.OSM.OSM: instance NodeWayRelations OSM
- Geo.OSM.OSM: instance Show OSM
- Geo.OSM.OSM: instance Version OSM
- Geo.OSM.OSM: instance XmlPickler OSM
- Geo.OSM.OSM: osm :: String -> Maybe String -> Maybe (Either Bound Bounds) -> [NodeWayRelation] -> OSM
- Geo.OSM.Relation: data Relation
- Geo.OSM.Relation: instance Changeset Relation
- Geo.OSM.Relation: instance Eq Relation
- Geo.OSM.Relation: instance Id Relation
- Geo.OSM.Relation: instance Members Relation
- Geo.OSM.Relation: instance Show Relation
- Geo.OSM.Relation: instance Tags Relation
- Geo.OSM.Relation: instance Timestamp Relation
- Geo.OSM.Relation: instance Uid Relation
- Geo.OSM.Relation: instance User Relation
- Geo.OSM.Relation: instance Visible Relation
- Geo.OSM.Relation: instance XmlPickler Relation
- Geo.OSM.Relation: relation :: [Member] -> String -> [Tag] -> Maybe String -> Bool -> (Maybe String, Maybe String) -> Maybe String -> Relation
- Geo.OSM.Tag: data Tag
- Geo.OSM.Tag: instance Eq Tag
- Geo.OSM.Tag: instance K Tag
- Geo.OSM.Tag: instance Show Tag
- Geo.OSM.Tag: instance V Tag
- Geo.OSM.Tag: instance XmlPickler Tag
- Geo.OSM.Tag: tag :: String -> String -> Tag
- Geo.OSM.Way: data Way
- Geo.OSM.Way: instance Changeset Way
- Geo.OSM.Way: instance Eq Way
- Geo.OSM.Way: instance Id Way
- Geo.OSM.Way: instance Nds Way
- Geo.OSM.Way: instance Show Way
- Geo.OSM.Way: instance Tags Way
- Geo.OSM.Way: instance Timestamp Way
- Geo.OSM.Way: instance Uid Way
- Geo.OSM.Way: instance User Way
- Geo.OSM.Way: instance Visible Way
- Geo.OSM.Way: instance XmlPickler Way
- Geo.OSM.Way: way :: [Nd] -> String -> [Tag] -> Maybe String -> Bool -> (Maybe String, Maybe String) -> Maybe String -> Way
+ Data.Geo.OSM.Accessor.BoundOrs: boundOrs :: (BoundOrs a) => a -> x -> (Bound -> x) -> (Bounds -> x) -> x
+ Data.Geo.OSM.Accessor.BoundOrs: class BoundOrs a
+ Data.Geo.OSM.Accessor.Box: box :: (Box a) => a -> String
+ Data.Geo.OSM.Accessor.Box: class Box a
+ Data.Geo.OSM.Accessor.Changeset: changeset :: (Changeset a) => a -> Maybe String
+ Data.Geo.OSM.Accessor.Changeset: class Changeset a
+ Data.Geo.OSM.Accessor.Generator: class Generator a
+ Data.Geo.OSM.Accessor.Generator: generator :: (Generator a) => a -> Maybe String
+ Data.Geo.OSM.Accessor.Id: class Id a
+ Data.Geo.OSM.Accessor.Id: id :: (Id a) => a -> String
+ Data.Geo.OSM.Accessor.K: class K a
+ Data.Geo.OSM.Accessor.K: k :: (K a) => a -> String
+ Data.Geo.OSM.Accessor.Lat: class Lat a
+ Data.Geo.OSM.Accessor.Lat: lat :: (Lat a) => a -> String
+ Data.Geo.OSM.Accessor.Lon: class Lon a
+ Data.Geo.OSM.Accessor.Lon: lon :: (Lon a) => a -> String
+ Data.Geo.OSM.Accessor.Maxlat: class Maxlat a
+ Data.Geo.OSM.Accessor.Maxlat: maxlat :: (Maxlat a) => a -> String
+ Data.Geo.OSM.Accessor.Maxlon: class Maxlon a
+ Data.Geo.OSM.Accessor.Maxlon: maxlon :: (Maxlon a) => a -> String
+ Data.Geo.OSM.Accessor.Members: class Members a
+ Data.Geo.OSM.Accessor.Members: members :: (Members a) => a -> [Member]
+ Data.Geo.OSM.Accessor.Minlat: class Minlat a
+ Data.Geo.OSM.Accessor.Minlat: minlat :: (Minlat a) => a -> String
+ Data.Geo.OSM.Accessor.Minlon: class Minlon a
+ Data.Geo.OSM.Accessor.Minlon: minlon :: (Minlon a) => a -> String
+ Data.Geo.OSM.Accessor.Mtype: class Mtype a
+ Data.Geo.OSM.Accessor.Mtype: mtype :: (Mtype a) => a -> MemberType
+ Data.Geo.OSM.Accessor.Nds: class Nds a
+ Data.Geo.OSM.Accessor.Nds: nds :: (Nds a) => a -> [Nd]
+ Data.Geo.OSM.Accessor.NodeWayRelations: class NodeWayRelations a
+ Data.Geo.OSM.Accessor.NodeWayRelations: nodes :: (NodeWayRelations a) => a -> [Node]
+ Data.Geo.OSM.Accessor.NodeWayRelations: nwrs :: (NodeWayRelations a) => a -> [NodeWayRelation]
+ Data.Geo.OSM.Accessor.NodeWayRelations: relations :: (NodeWayRelations a) => a -> [Relation]
+ Data.Geo.OSM.Accessor.NodeWayRelations: ways :: (NodeWayRelations a) => a -> [Way]
+ Data.Geo.OSM.Accessor.Origin: class Origin a
+ Data.Geo.OSM.Accessor.Origin: origin :: (Origin a) => a -> Maybe String
+ Data.Geo.OSM.Accessor.Ref: class Ref a
+ Data.Geo.OSM.Accessor.Ref: ref :: (Ref a) => a -> String
+ Data.Geo.OSM.Accessor.Role: class Role a
+ Data.Geo.OSM.Accessor.Role: role :: (Role a) => a -> String
+ Data.Geo.OSM.Accessor.Tags: class Tags a
+ Data.Geo.OSM.Accessor.Tags: hasTagValue :: (Tags a) => String -> String -> a -> Bool
+ Data.Geo.OSM.Accessor.Tags: tagMap :: (Tags a) => a -> Map String String
+ Data.Geo.OSM.Accessor.Tags: tags :: (Tags a) => a -> [Tag]
+ Data.Geo.OSM.Accessor.Timestamp: class Timestamp a
+ Data.Geo.OSM.Accessor.Timestamp: timestamp :: (Timestamp a) => a -> Maybe String
+ Data.Geo.OSM.Accessor.Uid: class Uid a
+ Data.Geo.OSM.Accessor.Uid: uid :: (Uid a) => a -> Maybe String
+ Data.Geo.OSM.Accessor.User: class User a
+ Data.Geo.OSM.Accessor.User: user :: (User a) => a -> Maybe String
+ Data.Geo.OSM.Accessor.V: class V a
+ Data.Geo.OSM.Accessor.V: v :: (V a) => a -> String
+ Data.Geo.OSM.Accessor.Version: class Version a
+ Data.Geo.OSM.Accessor.Version: version :: (Version a) => a -> String
+ Data.Geo.OSM.Accessor.Visible: class Visible a
+ Data.Geo.OSM.Accessor.Visible: visible :: (Visible a) => a -> Bool
+ Data.Geo.OSM.Bound: bound :: String -> Maybe String -> Bound
+ Data.Geo.OSM.Bound: data Bound
+ Data.Geo.OSM.Bound: instance Box Bound
+ Data.Geo.OSM.Bound: instance Eq Bound
+ Data.Geo.OSM.Bound: instance Origin Bound
+ Data.Geo.OSM.Bound: instance Show Bound
+ Data.Geo.OSM.Bound: instance XmlPickler Bound
+ Data.Geo.OSM.Bounds: bounds :: String -> String -> String -> String -> Maybe String -> Bounds
+ Data.Geo.OSM.Bounds: data Bounds
+ Data.Geo.OSM.Bounds: instance Eq Bounds
+ Data.Geo.OSM.Bounds: instance Maxlat Bounds
+ Data.Geo.OSM.Bounds: instance Maxlon Bounds
+ Data.Geo.OSM.Bounds: instance Minlat Bounds
+ Data.Geo.OSM.Bounds: instance Minlon Bounds
+ Data.Geo.OSM.Bounds: instance Origin Bounds
+ Data.Geo.OSM.Bounds: instance Show Bounds
+ Data.Geo.OSM.Bounds: instance XmlPickler Bounds
+ Data.Geo.OSM.Member: data Member
+ Data.Geo.OSM.Member: instance Eq Member
+ Data.Geo.OSM.Member: instance Mtype Member
+ Data.Geo.OSM.Member: instance Ref Member
+ Data.Geo.OSM.Member: instance Role Member
+ Data.Geo.OSM.Member: instance Show Member
+ Data.Geo.OSM.Member: instance XmlPickler Member
+ Data.Geo.OSM.Member: member :: MemberType -> String -> String -> Member
+ Data.Geo.OSM.MemberType: data MemberType
+ Data.Geo.OSM.MemberType: foldMemberType :: MemberType -> x -> x -> x -> x
+ Data.Geo.OSM.MemberType: instance Eq MemberType
+ Data.Geo.OSM.MemberType: instance Show MemberType
+ Data.Geo.OSM.MemberType: instance XmlPickler MemberType
+ Data.Geo.OSM.MemberType: nodeType :: MemberType
+ Data.Geo.OSM.MemberType: relationType :: MemberType
+ Data.Geo.OSM.MemberType: wayType :: MemberType
+ Data.Geo.OSM.NWRCommon: data NWRCommon
+ Data.Geo.OSM.NWRCommon: instance Changeset NWRCommon
+ Data.Geo.OSM.NWRCommon: instance Eq NWRCommon
+ Data.Geo.OSM.NWRCommon: instance Id NWRCommon
+ Data.Geo.OSM.NWRCommon: instance Show NWRCommon
+ Data.Geo.OSM.NWRCommon: instance Tags NWRCommon
+ Data.Geo.OSM.NWRCommon: instance Timestamp NWRCommon
+ Data.Geo.OSM.NWRCommon: instance Uid NWRCommon
+ Data.Geo.OSM.NWRCommon: instance User NWRCommon
+ Data.Geo.OSM.NWRCommon: instance Visible NWRCommon
+ Data.Geo.OSM.NWRCommon: instance XmlPickler NWRCommon
+ Data.Geo.OSM.NWRCommon: nwrCommon :: String -> [Tag] -> Maybe String -> Bool -> (Maybe String, Maybe String) -> Maybe String -> NWRCommon
+ Data.Geo.OSM.Nd: data Nd
+ Data.Geo.OSM.Nd: instance Eq Nd
+ Data.Geo.OSM.Nd: instance Ref Nd
+ Data.Geo.OSM.Nd: instance Show Nd
+ Data.Geo.OSM.Nd: instance XmlPickler Nd
+ Data.Geo.OSM.Nd: nd :: String -> Nd
+ Data.Geo.OSM.Node: data Node
+ Data.Geo.OSM.Node: instance Changeset Node
+ Data.Geo.OSM.Node: instance Eq Node
+ Data.Geo.OSM.Node: instance Id Node
+ Data.Geo.OSM.Node: instance Lat Node
+ Data.Geo.OSM.Node: instance Lon Node
+ Data.Geo.OSM.Node: instance Show Node
+ Data.Geo.OSM.Node: instance Tags Node
+ Data.Geo.OSM.Node: instance Timestamp Node
+ Data.Geo.OSM.Node: instance Uid Node
+ Data.Geo.OSM.Node: instance User Node
+ Data.Geo.OSM.Node: instance Visible Node
+ Data.Geo.OSM.Node: instance XmlPickler Node
+ Data.Geo.OSM.Node: node :: String -> String -> String -> [Tag] -> Maybe String -> Bool -> (Maybe String, Maybe String) -> Maybe String -> Node
+ Data.Geo.OSM.NodeWayRelation: data NodeWayRelation
+ Data.Geo.OSM.NodeWayRelation: foldNodeWayRelation :: NodeWayRelation -> (Node -> x) -> (Way -> x) -> (Relation -> x) -> x
+ Data.Geo.OSM.NodeWayRelation: instance Eq NodeWayRelation
+ Data.Geo.OSM.NodeWayRelation: instance Show NodeWayRelation
+ Data.Geo.OSM.NodeWayRelation: instance XmlPickler NodeWayRelation
+ Data.Geo.OSM.NodeWayRelation: isNode :: NodeWayRelation -> Bool
+ Data.Geo.OSM.NodeWayRelation: isRelation :: NodeWayRelation -> Bool
+ Data.Geo.OSM.NodeWayRelation: isWay :: NodeWayRelation -> Bool
+ Data.Geo.OSM.NodeWayRelation: node' :: Node -> NodeWayRelation
+ Data.Geo.OSM.NodeWayRelation: relation' :: Relation -> NodeWayRelation
+ Data.Geo.OSM.NodeWayRelation: way' :: Way -> NodeWayRelation
+ Data.Geo.OSM.OSM: data OSM
+ Data.Geo.OSM.OSM: instance BoundOrs OSM
+ Data.Geo.OSM.OSM: instance Eq OSM
+ Data.Geo.OSM.OSM: instance Generator OSM
+ Data.Geo.OSM.OSM: instance NodeWayRelations OSM
+ Data.Geo.OSM.OSM: instance Show OSM
+ Data.Geo.OSM.OSM: instance Version OSM
+ Data.Geo.OSM.OSM: instance XmlPickler OSM
+ Data.Geo.OSM.OSM: osm :: String -> Maybe String -> Maybe (Either Bound Bounds) -> [NodeWayRelation] -> OSM
+ Data.Geo.OSM.Relation: data Relation
+ Data.Geo.OSM.Relation: instance Changeset Relation
+ Data.Geo.OSM.Relation: instance Eq Relation
+ Data.Geo.OSM.Relation: instance Id Relation
+ Data.Geo.OSM.Relation: instance Members Relation
+ Data.Geo.OSM.Relation: instance Show Relation
+ Data.Geo.OSM.Relation: instance Tags Relation
+ Data.Geo.OSM.Relation: instance Timestamp Relation
+ Data.Geo.OSM.Relation: instance Uid Relation
+ Data.Geo.OSM.Relation: instance User Relation
+ Data.Geo.OSM.Relation: instance Visible Relation
+ Data.Geo.OSM.Relation: instance XmlPickler Relation
+ Data.Geo.OSM.Relation: relation :: [Member] -> String -> [Tag] -> Maybe String -> Bool -> (Maybe String, Maybe String) -> Maybe String -> Relation
+ Data.Geo.OSM.Tag: data Tag
+ Data.Geo.OSM.Tag: instance Eq Tag
+ Data.Geo.OSM.Tag: instance K Tag
+ Data.Geo.OSM.Tag: instance Show Tag
+ Data.Geo.OSM.Tag: instance V Tag
+ Data.Geo.OSM.Tag: instance XmlPickler Tag
+ Data.Geo.OSM.Tag: tag :: String -> String -> Tag
+ Data.Geo.OSM.Way: data Way
+ Data.Geo.OSM.Way: instance Changeset Way
+ Data.Geo.OSM.Way: instance Eq Way
+ Data.Geo.OSM.Way: instance Id Way
+ Data.Geo.OSM.Way: instance Nds Way
+ Data.Geo.OSM.Way: instance Show Way
+ Data.Geo.OSM.Way: instance Tags Way
+ Data.Geo.OSM.Way: instance Timestamp Way
+ Data.Geo.OSM.Way: instance Uid Way
+ Data.Geo.OSM.Way: instance User Way
+ Data.Geo.OSM.Way: instance Visible Way
+ Data.Geo.OSM.Way: instance XmlPickler Way
+ Data.Geo.OSM.Way: way :: [Nd] -> String -> [Tag] -> Maybe String -> Bool -> (Maybe String, Maybe String) -> Maybe String -> Way
Files
- Data/Geo/OSM.hs +80/−0
- Data/Geo/OSM/Accessor/BoundOrs.hs +8/−0
- Data/Geo/OSM/Accessor/Box.hs +5/−0
- Data/Geo/OSM/Accessor/Changeset.hs +5/−0
- Data/Geo/OSM/Accessor/Generator.hs +5/−0
- Data/Geo/OSM/Accessor/Id.hs +5/−0
- Data/Geo/OSM/Accessor/K.hs +5/−0
- Data/Geo/OSM/Accessor/Lat.hs +5/−0
- Data/Geo/OSM/Accessor/Lon.hs +5/−0
- Data/Geo/OSM/Accessor/Maxlat.hs +5/−0
- Data/Geo/OSM/Accessor/Maxlon.hs +5/−0
- Data/Geo/OSM/Accessor/Members.hs +7/−0
- Data/Geo/OSM/Accessor/Minlat.hs +5/−0
- Data/Geo/OSM/Accessor/Minlon.hs +5/−0
- Data/Geo/OSM/Accessor/Mtype.hs +7/−0
- Data/Geo/OSM/Accessor/Nds.hs +7/−0
- Data/Geo/OSM/Accessor/NodeWayRelations.hs +19/−0
- Data/Geo/OSM/Accessor/Origin.hs +5/−0
- Data/Geo/OSM/Accessor/Ref.hs +5/−0
- Data/Geo/OSM/Accessor/Role.hs +5/−0
- Data/Geo/OSM/Accessor/Tags.hs +19/−0
- Data/Geo/OSM/Accessor/Timestamp.hs +5/−0
- Data/Geo/OSM/Accessor/Uid.hs +5/−0
- Data/Geo/OSM/Accessor/User.hs +5/−0
- Data/Geo/OSM/Accessor/V.hs +5/−0
- Data/Geo/OSM/Accessor/Version.hs +5/−0
- Data/Geo/OSM/Accessor/Visible.hs +5/−0
- Data/Geo/OSM/Bound.hs +32/−0
- Data/Geo/OSM/Bounds.hs +48/−0
- Data/Geo/OSM/Member.hs +39/−0
- Data/Geo/OSM/MemberType.hs +51/−0
- Data/Geo/OSM/NWRCommon.hs +67/−0
- Data/Geo/OSM/Nd.hs +27/−0
- Data/Geo/OSM/Node.hs +70/−0
- Data/Geo/OSM/NodeWayRelation.hs +67/−0
- Data/Geo/OSM/OSM.hs +51/−0
- Data/Geo/OSM/Relation.hs +66/−0
- Data/Geo/OSM/Tag.hs +32/−0
- Data/Geo/OSM/Way.hs +66/−0
- Geo/OSM.hs +0/−80
- Geo/OSM/Accessor/BoundOrs.hs +0/−8
- Geo/OSM/Accessor/Box.hs +0/−5
- Geo/OSM/Accessor/Changeset.hs +0/−5
- Geo/OSM/Accessor/Generator.hs +0/−5
- Geo/OSM/Accessor/Id.hs +0/−5
- Geo/OSM/Accessor/K.hs +0/−5
- Geo/OSM/Accessor/Lat.hs +0/−5
- Geo/OSM/Accessor/Lon.hs +0/−5
- Geo/OSM/Accessor/Maxlat.hs +0/−5
- Geo/OSM/Accessor/Maxlon.hs +0/−5
- Geo/OSM/Accessor/Members.hs +0/−7
- Geo/OSM/Accessor/Minlat.hs +0/−5
- Geo/OSM/Accessor/Minlon.hs +0/−5
- Geo/OSM/Accessor/Mtype.hs +0/−7
- Geo/OSM/Accessor/Nds.hs +0/−7
- Geo/OSM/Accessor/NodeWayRelations.hs +0/−19
- Geo/OSM/Accessor/Origin.hs +0/−5
- Geo/OSM/Accessor/Ref.hs +0/−5
- Geo/OSM/Accessor/Role.hs +0/−5
- Geo/OSM/Accessor/Tags.hs +0/−19
- Geo/OSM/Accessor/Timestamp.hs +0/−5
- Geo/OSM/Accessor/Uid.hs +0/−5
- Geo/OSM/Accessor/User.hs +0/−5
- Geo/OSM/Accessor/V.hs +0/−5
- Geo/OSM/Accessor/Version.hs +0/−5
- Geo/OSM/Accessor/Visible.hs +0/−5
- Geo/OSM/Bound.hs +0/−32
- Geo/OSM/Bounds.hs +0/−48
- Geo/OSM/Member.hs +0/−39
- Geo/OSM/MemberType.hs +0/−51
- Geo/OSM/NWRCommon.hs +0/−67
- Geo/OSM/Nd.hs +0/−27
- Geo/OSM/Node.hs +0/−70
- Geo/OSM/NodeWayRelation.hs +0/−67
- Geo/OSM/OSM.hs +0/−51
- Geo/OSM/Relation.hs +0/−66
- Geo/OSM/Tag.hs +0/−32
- Geo/OSM/Way.hs +0/−66
- OSM.cabal +40/−40
+ Data/Geo/OSM.hs view
@@ -0,0 +1,80 @@+module Data.Geo.OSM(+ module Text.XML.HXT.Arrow,+ module Data.Geo.OSM.Bound,+ module Data.Geo.OSM.Bounds,+ module Data.Geo.OSM.Member,+ module Data.Geo.OSM.MemberType,+ module Data.Geo.OSM.Nd,+ module Data.Geo.OSM.Node,+ module Data.Geo.OSM.NodeWayRelation,+ module Data.Geo.OSM.OSM,+ module Data.Geo.OSM.Relation,+ module Data.Geo.OSM.Tag,+ module Data.Geo.OSM.Way,+ module Data.Geo.OSM.Accessor.BoundOrs,+ module Data.Geo.OSM.Accessor.Box,+ module Data.Geo.OSM.Accessor.Changeset,+ module Data.Geo.OSM.Accessor.Generator,+ module Data.Geo.OSM.Accessor.Id,+ module Data.Geo.OSM.Accessor.K,+ module Data.Geo.OSM.Accessor.Lat,+ module Data.Geo.OSM.Accessor.Lon,+ module Data.Geo.OSM.Accessor.Maxlat,+ module Data.Geo.OSM.Accessor.Maxlon,+ module Data.Geo.OSM.Accessor.Members,+ module Data.Geo.OSM.Accessor.Minlat,+ module Data.Geo.OSM.Accessor.Minlon,+ module Data.Geo.OSM.Accessor.Mtype,+ module Data.Geo.OSM.Accessor.Nds,+ module Data.Geo.OSM.Accessor.NodeWayRelations,+ module Data.Geo.OSM.Accessor.Origin,+ module Data.Geo.OSM.Accessor.Ref,+ module Data.Geo.OSM.Accessor.Role,+ module Data.Geo.OSM.Accessor.Tags,+ module Data.Geo.OSM.Accessor.Timestamp,+ module Data.Geo.OSM.Accessor.Uid,+ module Data.Geo.OSM.Accessor.User,+ module Data.Geo.OSM.Accessor.Version,+ module Data.Geo.OSM.Accessor.V,+ module Data.Geo.OSM.Accessor.Visible+ ) where+++import Text.XML.HXT.Arrow+import Data.Geo.OSM.Bound+import Data.Geo.OSM.Bounds+import Data.Geo.OSM.Member+import Data.Geo.OSM.MemberType+import Data.Geo.OSM.Nd+import Data.Geo.OSM.Node+import Data.Geo.OSM.NodeWayRelation+import Data.Geo.OSM.OSM+import Data.Geo.OSM.Relation+import Data.Geo.OSM.Tag+import Data.Geo.OSM.Way+import Data.Geo.OSM.Accessor.BoundOrs+import Data.Geo.OSM.Accessor.Box+import Data.Geo.OSM.Accessor.Changeset+import Data.Geo.OSM.Accessor.Generator+import Data.Geo.OSM.Accessor.Id+import Data.Geo.OSM.Accessor.K+import Data.Geo.OSM.Accessor.Lat+import Data.Geo.OSM.Accessor.Lon+import Data.Geo.OSM.Accessor.Maxlat+import Data.Geo.OSM.Accessor.Maxlon+import Data.Geo.OSM.Accessor.Members+import Data.Geo.OSM.Accessor.Minlat+import Data.Geo.OSM.Accessor.Minlon+import Data.Geo.OSM.Accessor.Mtype+import Data.Geo.OSM.Accessor.Nds+import Data.Geo.OSM.Accessor.NodeWayRelations+import Data.Geo.OSM.Accessor.Origin+import Data.Geo.OSM.Accessor.Ref+import Data.Geo.OSM.Accessor.Role+import Data.Geo.OSM.Accessor.Tags+import Data.Geo.OSM.Accessor.Timestamp+import Data.Geo.OSM.Accessor.Uid+import Data.Geo.OSM.Accessor.User+import Data.Geo.OSM.Accessor.Version+import Data.Geo.OSM.Accessor.V+import Data.Geo.OSM.Accessor.Visible
+ Data/Geo/OSM/Accessor/BoundOrs.hs view
@@ -0,0 +1,8 @@+-- | Values with a @bounds@ accessor which is either empty, a @Bound@ or a @Bounds@.+module Data.Geo.OSM.Accessor.BoundOrs where++import Data.Geo.OSM.Bound+import Data.Geo.OSM.Bounds++class BoundOrs a where+ boundOrs :: a -> x -> (Bound -> x) -> (Bounds -> x) -> x
+ Data/Geo/OSM/Accessor/Box.hs view
@@ -0,0 +1,5 @@+-- | Values with a @box@ string accessor.+module Data.Geo.OSM.Accessor.Box where++class Box a where+ box :: a -> String
+ Data/Geo/OSM/Accessor/Changeset.hs view
@@ -0,0 +1,5 @@+-- | Values with a @changeset@ optional string accessor.+module Data.Geo.OSM.Accessor.Changeset where++class Changeset a where+ changeset :: a -> Maybe String
+ Data/Geo/OSM/Accessor/Generator.hs view
@@ -0,0 +1,5 @@+-- | Values with a @generator@ optional string accessor.+module Data.Geo.OSM.Accessor.Generator where++class Generator a where+ generator :: a -> Maybe String
+ Data/Geo/OSM/Accessor/Id.hs view
@@ -0,0 +1,5 @@+-- | Values with a @id@ string accessor.+module Data.Geo.OSM.Accessor.Id where++class Id a where+ id :: a -> String
+ Data/Geo/OSM/Accessor/K.hs view
@@ -0,0 +1,5 @@+-- | Values with a @k@ string accessor.+module Data.Geo.OSM.Accessor.K where++class K a where+ k :: a -> String
+ Data/Geo/OSM/Accessor/Lat.hs view
@@ -0,0 +1,5 @@+-- | Values with a @lat@ string accessor.+module Data.Geo.OSM.Accessor.Lat where++class Lat a where+ lat :: a -> String
+ Data/Geo/OSM/Accessor/Lon.hs view
@@ -0,0 +1,5 @@+-- | Values with a @lon@ string accessor.+module Data.Geo.OSM.Accessor.Lon where++class Lon a where+ lon :: a -> String
+ Data/Geo/OSM/Accessor/Maxlat.hs view
@@ -0,0 +1,5 @@+-- | Values with a @maxlat@ string accessor.+module Data.Geo.OSM.Accessor.Maxlat where++class Maxlat a where+ maxlat :: a -> String
+ Data/Geo/OSM/Accessor/Maxlon.hs view
@@ -0,0 +1,5 @@+-- -- | Values with a @maxlon@ string accessor.+module Data.Geo.OSM.Accessor.Maxlon where++class Maxlon a where+ maxlon :: a -> String
+ Data/Geo/OSM/Accessor/Members.hs view
@@ -0,0 +1,7 @@+-- | Values with a @member@ accessor that is a list of @Member@.+module Data.Geo.OSM.Accessor.Members where++import Data.Geo.OSM.Member++class Members a where+ members :: a -> [Member]
+ Data/Geo/OSM/Accessor/Minlat.hs view
@@ -0,0 +1,5 @@+-- | Values with a @minlat@ string accessor.+module Data.Geo.OSM.Accessor.Minlat where++class Minlat a where+ minlat :: a -> String
+ Data/Geo/OSM/Accessor/Minlon.hs view
@@ -0,0 +1,5 @@+-- | Values with a @minlon@ string accessor.+module Data.Geo.OSM.Accessor.Minlon where++class Minlon a where+ minlon :: a -> String
+ Data/Geo/OSM/Accessor/Mtype.hs view
@@ -0,0 +1,7 @@+-- | Values with a @type@ accessor.+module Data.Geo.OSM.Accessor.Mtype where++import Data.Geo.OSM.MemberType++class Mtype a where+ mtype :: a -> MemberType
+ Data/Geo/OSM/Accessor/Nds.hs view
@@ -0,0 +1,7 @@+-- | Values with a @nd@ accessor that is a list of @Nd@.+module Data.Geo.OSM.Accessor.Nds where++import Data.Geo.OSM.Nd++class Nds a where+ nds :: a -> [Nd]
+ Data/Geo/OSM/Accessor/NodeWayRelations.hs view
@@ -0,0 +1,19 @@+-- | Values with a @nwrs@ accessor that is a list of @NodeWayRelation@.+module Data.Geo.OSM.Accessor.NodeWayRelations where++import Data.Geo.OSM.NodeWayRelation+import Data.Geo.OSM.Node+import Data.Geo.OSM.Way+import Data.Geo.OSM.Relation++class NodeWayRelations a where+ nwrs :: a -> [NodeWayRelation]++nodes :: (NodeWayRelations a) => a -> [Node]+nodes k = nwrs k >>= \t -> foldNodeWayRelation t return (const []) (const [])++ways :: (NodeWayRelations a) => a -> [Way]+ways k = nwrs k >>= \t -> foldNodeWayRelation t (const []) return (const [])++relations :: (NodeWayRelations a) => a -> [Relation]+relations k = nwrs k >>= \t -> foldNodeWayRelation t (const []) (const []) return
+ Data/Geo/OSM/Accessor/Origin.hs view
@@ -0,0 +1,5 @@+-- | Values with a @origin@ optional string accessor.+module Data.Geo.OSM.Accessor.Origin where++class Origin a where+ origin :: a -> Maybe String
+ Data/Geo/OSM/Accessor/Ref.hs view
@@ -0,0 +1,5 @@+-- | Values with a @ref@ string accessor.+module Data.Geo.OSM.Accessor.Ref where++class Ref a where+ ref :: a -> String
+ Data/Geo/OSM/Accessor/Role.hs view
@@ -0,0 +1,5 @@+-- | Values with a @role@ string accessor.+module Data.Geo.OSM.Accessor.Role where++class Role a where+ role :: a -> String
+ Data/Geo/OSM/Accessor/Tags.hs view
@@ -0,0 +1,19 @@+-- | Values with a @tags@ accessor that is a list of tags.+module Data.Geo.OSM.Accessor.Tags where++import Data.Geo.OSM.Tag+import Data.Geo.OSM.Accessor.K+import Data.Geo.OSM.Accessor.V+import qualified Data.Map as M+import Control.Arrow+import Data.Foldable+import Prelude hiding (any)++class Tags a where+ tags :: a -> [Tag]++tagMap :: (Tags a) => a -> M.Map String String+tagMap = M.fromList . map (k &&& v) . tags++hasTagValue :: (Tags a) => String -> String -> a -> Bool+hasTagValue k' v' n = any (== v') (k' `M.lookup` tagMap n)
+ Data/Geo/OSM/Accessor/Timestamp.hs view
@@ -0,0 +1,5 @@+-- | Values with a @timestamp@ optional string accessor.+module Data.Geo.OSM.Accessor.Timestamp where++class Timestamp a where+ timestamp :: a -> Maybe String
+ Data/Geo/OSM/Accessor/Uid.hs view
@@ -0,0 +1,5 @@+-- | Values with a @uid@ optional string accessor.+module Data.Geo.OSM.Accessor.Uid where++class Uid a where+ uid :: a -> Maybe String
+ Data/Geo/OSM/Accessor/User.hs view
@@ -0,0 +1,5 @@+-- | Values with a @user@ optional string accessor.+module Data.Geo.OSM.Accessor.User where++class User a where+ user :: a -> Maybe String
+ Data/Geo/OSM/Accessor/V.hs view
@@ -0,0 +1,5 @@+-- | Values with a @v@ string accessor.+module Data.Geo.OSM.Accessor.V where++class V a where+ v :: a -> String
+ Data/Geo/OSM/Accessor/Version.hs view
@@ -0,0 +1,5 @@+-- | Values with a @version@ string accessor.+module Data.Geo.OSM.Accessor.Version where++class Version a where+ version :: a -> String
+ Data/Geo/OSM/Accessor/Visible.hs view
@@ -0,0 +1,5 @@+-- | Values with a @visible@ boolean accessor.+module Data.Geo.OSM.Accessor.Visible where++class Visible a where+ visible :: a -> Bool
+ Data/Geo/OSM/Bound.hs view
@@ -0,0 +1,32 @@+-- | The @bound@ element of a OSM file.+module Data.Geo.OSM.Bound(+ Bound,+ bound+ ) where++import Text.XML.HXT.Arrow+import Text.XML.HXT.Extras+import Data.Geo.OSM.Accessor.Box+import Data.Geo.OSM.Accessor.Origin++-- | The @bound@ element of a OSM file.+data Bound = Bound String (Maybe String)+ deriving Eq++instance XmlPickler Bound where+ xpickle = xpElem "bound" (xpWrap (uncurry Bound, \(Bound b o) -> (b, o)) (xpPair (xpAttr "box" xpText) (xpOption (xpAttr "origin" xpText))))++instance Show Bound where+ show = showPickled []++instance Box Bound where+ box (Bound x _) = x++instance Origin Bound where+ origin (Bound _ x) = x++-- | Constructs a bound with a box and origin attributes.+bound :: String -- ^ The @box@ attribute.+ -> Maybe String -- ^ The @origin@ attribute.+ -> Bound+bound = Bound
+ Data/Geo/OSM/Bounds.hs view
@@ -0,0 +1,48 @@+-- | The @bounds@ element of a OSM file.+module Data.Geo.OSM.Bounds(+ Bounds,+ bounds+ ) where++import Text.XML.HXT.Arrow+import Text.XML.HXT.Extras+import Data.Geo.OSM.Accessor.Minlat+import Data.Geo.OSM.Accessor.Maxlat+import Data.Geo.OSM.Accessor.Minlon+import Data.Geo.OSM.Accessor.Maxlon+import Data.Geo.OSM.Accessor.Origin++-- | The @bounds@ element of a OSM file.+data Bounds = Bounds String String String String (Maybe String)+ deriving Eq++instance XmlPickler Bounds where+ xpickle = xpElem "bounds" (xpWrap (\(minlat', minlon', maxlat', maxlon', origin') -> Bounds minlat' minlon' maxlat' maxlon' origin', \(Bounds minlat' minlon' maxlat' maxlon' origin') -> (minlat', minlon', maxlat', maxlon', origin'))+ (xp5Tuple (xpAttr "minlat" xpText) (xpAttr "minlon" xpText) (xpAttr "maxlat" xpText) (xpAttr "maxlon" xpText) (xpOption (xpAttr "origin" xpText))))++instance Show Bounds where+ show = showPickled []++instance Minlat Bounds where+ minlat (Bounds x _ _ _ _) = x++instance Minlon Bounds where+ minlon (Bounds _ x _ _ _) = x++instance Maxlat Bounds where+ maxlat (Bounds _ _ x _ _) = x++instance Maxlon Bounds where+ maxlon (Bounds _ _ _ x _) = x++instance Origin Bounds where+ origin (Bounds _ _ _ _ x) = x++-- | Constructs a bounds with a minlat, minlon, maxlat, maxlon and origin attributes.+bounds :: String -- ^ The @minlat@ attribute.+ -> String -- ^ The @minlon@ attribute.+ -> String -- ^ The @maxlat@ attribute.+ -> String -- ^ The @maxlon@ attribute.+ -> Maybe String -- ^ The @origin@ attribute.+ -> Bounds+bounds = Bounds
+ Data/Geo/OSM/Member.hs view
@@ -0,0 +1,39 @@+-- | The @member@ element of a OSM file.+module Data.Geo.OSM.Member(+ Member,+ member+ ) where++import Text.XML.HXT.Arrow+import Text.XML.HXT.Extras+import Data.Geo.OSM.MemberType+import Data.Geo.OSM.Accessor.Mtype+import Data.Geo.OSM.Accessor.Ref+import Data.Geo.OSM.Accessor.Role++-- | The @member@ element of a OSM file.+data Member = Member MemberType String String+ deriving Eq++instance XmlPickler Member where+ xpickle = xpElem "member" (xpWrap (\(mtype', mref', mrole') -> Member mtype' mref' mrole', \(Member mtype' mref' mrole') -> (mtype', mref', mrole'))+ (xpTriple xpickle (xpAttr "ref" xpText) (xpAttr "role" xpText)))++instance Show Member where+ show = showPickled []++instance Mtype Member where+ mtype (Member x _ _) = x++instance Ref Member where+ ref (Member _ x _) = x++instance Role Member where+ role (Member _ _ x) = x++-- | Constructs a member with a type, ref and role.+member :: MemberType -- ^ The member @type@ attribute.+ -> String -- ^ The member @ref@ attribute.+ -> String -- ^ The member @role@ attribute.+ -> Member+member = Member
+ Data/Geo/OSM/MemberType.hs view
@@ -0,0 +1,51 @@+-- | The @type@ attribute of a @member@ element of a OSM file.+module Data.Geo.OSM.MemberType(+ MemberType,+ foldMemberType,+ wayType,+ nodeType,+ relationType+ ) where++import Text.XML.HXT.Arrow+import Text.XML.HXT.Extras+import Control.Applicative+import Data.Char++-- | The @type@ attribute of a @member@ element of a OSM file.+data MemberType = WayType | NodeType | RelationType+ deriving Eq++-- | Folds a member-type (catamorphism).+foldMemberType :: MemberType -- ^ The member-type to fold.+ -> x -- ^ If the type is a way.+ -> x -- ^ If the type is a node.+ -> x -- ^ If the type is a relation.+ -> x+foldMemberType WayType x _ _ = x+foldMemberType NodeType _ x _ = x+foldMemberType RelationType _ _ x = x++instance XmlPickler MemberType where+ xpickle = xpWrapMaybe (\s -> case toLower <$> s of "way" -> Just WayType+ "node" -> Just NodeType+ "relation" -> Just RelationType+ _ -> Nothing,+ \t -> case t of WayType -> "way"+ NodeType -> "node"+ RelationType -> "relation") (xpAttr "type" xpText)++instance Show MemberType where+ show = showPickled []++-- | Constructs a member-type that is a way.+wayType :: MemberType+wayType = WayType++-- | Constructs a member-type that is a node.+nodeType :: MemberType+nodeType = NodeType++-- | Constructs a member-type that is a relation.+relationType :: MemberType+relationType = RelationType
+ Data/Geo/OSM/NWRCommon.hs view
@@ -0,0 +1,67 @@+-- | The common attributes between the @node@, @way@ and @relation@ elements.+module Data.Geo.OSM.NWRCommon(+ NWRCommon,+ nwrCommon+ ) where++import Text.XML.HXT.Arrow+import Text.XML.HXT.Extras+import Control.Applicative+import Data.Char+import Data.Geo.OSM.Tag+import Data.Geo.OSM.Accessor.Id+import Data.Geo.OSM.Accessor.Tags+import Data.Geo.OSM.Accessor.Changeset+import Data.Geo.OSM.Accessor.Visible+import Data.Geo.OSM.Accessor.User+import Data.Geo.OSM.Accessor.Uid+import Data.Geo.OSM.Accessor.Timestamp++-- | The common attributes between the @node@, @way@ and @relation@ elements.+data NWRCommon = NWRCommon String [Tag] (Maybe String) Bool (Maybe String, Maybe String) (Maybe String)+ deriving Eq++instance XmlPickler NWRCommon where+ xpickle = xpWrap (\(a, b, c, d, e, f) -> NWRCommon a b c d e f, \(NWRCommon a b c d e f) -> (a, b, c, d, e, f))+ (xp6Tuple (xpAttr "id" xpText)+ (xpList xpickle)+ (xpOption (xpAttr "changeset" xpText))+ (xpDefault True (xpWrapMaybe (\s -> case toLower <$> s of "true" -> Just True+ "false" -> Just False+ _ -> Nothing, (toLower <$>) . show) (xpAttr "visible" xpText)))+ (xpPair (xpOption (xpAttr "user" xpText)) (xpOption (xpAttr "uid" xpText)))+ (xpOption (xpAttr "timestamp" xpText)))++instance Show NWRCommon where+ show = showPickled []++instance Id NWRCommon where+ id (NWRCommon x _ _ _ _ _) = x++instance Tags NWRCommon where+ tags (NWRCommon _ x _ _ _ _) = x++instance Changeset NWRCommon where+ changeset (NWRCommon _ _ x _ _ _) = x++instance Visible NWRCommon where+ visible (NWRCommon _ _ _ x _ _) = x++instance User NWRCommon where+ user (NWRCommon _ _ _ _ (x, _) _) = x++instance Uid NWRCommon where+ uid (NWRCommon _ _ _ _ (_, x) _) = x++instance Timestamp NWRCommon where+ timestamp (NWRCommon _ _ _ _ _ x) = x++-- | Constructs with id, list of tags, changeset, visible, user&uid and timestamp.+nwrCommon :: String -- ^ The @id@ attribute.+ -> [Tag] -- ^ The list of tags (@tag@ elements).+ -> Maybe String -- ^ The @changeset@ attribute.+ -> Bool -- ^ The @visible@ attribute.+ -> (Maybe String, Maybe String) -- ^ The @user@ and @uid@ attributes.+ -> Maybe String -- ^ The @timestamp@ attribute.+ -> NWRCommon+nwrCommon = NWRCommon
+ Data/Geo/OSM/Nd.hs view
@@ -0,0 +1,27 @@+-- | The @nd@ element of a OSM file.+module Data.Geo.OSM.Nd(+ Nd,+ nd+ ) where++import Text.XML.HXT.Arrow+import Text.XML.HXT.Extras+import Data.Geo.OSM.Accessor.Ref++-- | The @nd@ element of a OSM file.+newtype Nd = Nd String+ deriving Eq++instance XmlPickler Nd where+ xpickle = xpElem "nd" (xpWrap (Nd, \(Nd r) -> r) (xpAttr "ref" xpText))++instance Show Nd where+ show = showPickled []++instance Ref Nd where+ ref (Nd x) = x++-- | Constructs a nd with a ref.+nd :: String -- ^ The @ref@ attribute.+ -> Nd+nd = Nd
+ Data/Geo/OSM/Node.hs view
@@ -0,0 +1,70 @@+-- | The @node@ element of a OSM file.+module Data.Geo.OSM.Node(+ Node,+ node+ ) where++import Text.XML.HXT.Arrow+import Text.XML.HXT.Extras+import Data.Geo.OSM.NWRCommon+import Data.Geo.OSM.Tag+import Data.Geo.OSM.Accessor.Id+import Data.Geo.OSM.Accessor.Tags+import Data.Geo.OSM.Accessor.Changeset+import Data.Geo.OSM.Accessor.Visible+import Data.Geo.OSM.Accessor.User+import Data.Geo.OSM.Accessor.Uid+import Data.Geo.OSM.Accessor.Timestamp+import Data.Geo.OSM.Accessor.Lat+import Data.Geo.OSM.Accessor.Lon+import Prelude hiding (id)++-- | The @node@ element of a OSM file.+data Node = Node String String NWRCommon+ deriving Eq++instance XmlPickler Node where+ xpickle = xpElem "node" (xpWrap (\(lat', lon', nwr') -> Node lat' lon' nwr', \(Node lat' lon' nwr') -> (lat', lon', nwr'))+ (xpTriple (xpAttr "lat" xpText) (xpAttr "lon" xpText) xpickle))++instance Show Node where+ show = showPickled []++instance Lat Node where+ lat (Node x _ _) = x++instance Lon Node where+ lon (Node _ x _) = x++instance Id Node where+ id (Node _ _ x) = id x++instance Tags Node where+ tags (Node _ _ x) = tags x++instance Changeset Node where+ changeset (Node _ _ x) = changeset x++instance Visible Node where+ visible (Node _ _ x) = visible x++instance User Node where+ user (Node _ _ x) = user x++instance Uid Node where+ uid (Node _ _ x) = uid x++instance Timestamp Node where+ timestamp (Node _ _ x) = timestamp x++-- | Constructs a node with a lat, lon, id, list of tags, changeset, visible, user&uid and timestamp.+node :: String -- ^ The @lat@ attribute.+ -> String -- ^ The @lon@ attribute.+ -> String -- ^ The @id@ attribute.+ -> [Tag] -- ^ The list of tags (@tag@ elements).+ -> Maybe String -- ^ The @changeset@ attribute.+ -> Bool -- ^ The @visible@ attribute.+ -> (Maybe String, Maybe String) -- ^ The @user@ and @uid@ attributes.+ -> Maybe String -- ^ The @timestamp@ attribute.+ -> Node+node = flip flip nwrCommon . (((.) . (.) . (.) . (.) . (.) . (.)) .) . Node
+ Data/Geo/OSM/NodeWayRelation.hs view
@@ -0,0 +1,67 @@+-- | The @node@, @way@, or @relation@ element of a OSM file.+module Data.Geo.OSM.NodeWayRelation(+ NodeWayRelation,+ foldNodeWayRelation,+ way',+ relation',+ node',+ isNode,+ isWay,+ isRelation+ ) where++import Text.XML.HXT.Arrow+import Text.XML.HXT.Extras+import Data.Geo.OSM.Node+import Data.Geo.OSM.Way+import Data.Geo.OSM.Relation++-- | The @node@, @way@, or @relation@ element of a OSM file.+data NodeWayRelation = N Node | W Way | R Relation+ deriving Eq++-- | Folds a node-way-relation (catamorphism).+foldNodeWayRelation :: NodeWayRelation -- ^ The @node@, @way@ or @relation@ element.+ -> (Node -> x) -- ^ If this is a @node@ element.+ -> (Way -> x) -- ^ If this is a @way@ element.+ -> (Relation -> x) -- ^ If this is a @relation@ element.+ -> x+foldNodeWayRelation (N n) x _ _ = x n+foldNodeWayRelation (W w) _ x _ = x w+foldNodeWayRelation (R r) _ _ x = x r++instance XmlPickler NodeWayRelation where+ xpickle = xpAlt (\r -> case r of N _ -> 0+ W _ -> 1+ R _ -> 2)+ [xpWrap (N, \(N n) -> n) xpickle, xpWrap (W, \(W w) -> w) xpickle, xpWrap (R, \(R r) -> r) xpickle]++instance Show NodeWayRelation where+ show = showPickled []++-- | Construct a @way@ element value.+way' :: Way -> NodeWayRelation+way' = W++-- | Construct a @relation@ element value.+relation' :: Relation -> NodeWayRelation+relation' = R++-- | Construct a @node@ element value.+node' :: Node -> NodeWayRelation+node' = N++-- | Returns whether the @node@, @way@ or @relation@ element is a node.+isNode :: NodeWayRelation -> Bool+isNode (N _) = True+isNode _ = False++-- | Returns whether the @node@, @way@ or @relation@ element is a way.+isWay :: NodeWayRelation -> Bool+isWay (W _) = True+isWay _ = False++-- | Returns whether the @node@, @way@ or @relation@ element is a relation.+isRelation :: NodeWayRelation -> Bool+isRelation (R _) = True+isRelation _ = False
+ Data/Geo/OSM/OSM.hs view
@@ -0,0 +1,51 @@+-- | The @osm@ element of a OSM file, which is the root element.+module Data.Geo.OSM.OSM(+ OSM,+ osm+ ) where++import Text.XML.HXT.Arrow+import Text.XML.HXT.Extras+import Data.Geo.OSM.NodeWayRelation+import Data.Geo.OSM.Bound+import Data.Geo.OSM.Bounds+import Data.Geo.OSM.Accessor.Version+import Data.Geo.OSM.Accessor.Generator+import Data.Geo.OSM.Accessor.BoundOrs+import Data.Geo.OSM.Accessor.NodeWayRelations++-- | The @osm@ element of a OSM file, which is the root element.+data OSM = OSM String (Maybe String) (Maybe (Either Bound Bounds)) [NodeWayRelation]+ deriving Eq++instance XmlPickler OSM where+ xpickle = xpElem "osm" (xpWrap (\(version', generator', bound', nwr') -> OSM version' generator' bound' nwr', \(OSM version' generator' bound' nwr') -> (version', generator', bound', nwr'))+ (xp4Tuple (xpAttr "version" xpText)+ (xpOption (xpAttr "generator" xpText))+ (xpOption (xpAlt (either (const 0) (const 1)) [xpWrap (Left, \(Left b) -> b) xpickle, xpWrap (Right, \(Right b) -> b) xpickle]))+ (xpList1 xpickle)))++instance Show OSM where+ show = showPickled []++instance Version OSM where+ version (OSM x _ _ _) = x++instance Generator OSM where+ generator (OSM _ x _ _) = x++instance BoundOrs OSM where+ boundOrs (OSM _ _ x _) n b bs = case x of Nothing -> n+ Just (Left b') -> b b'+ Just (Right b') -> bs b'++instance NodeWayRelations OSM where+ nwrs (OSM _ _ _ x) = x++-- | Constructs a osm with a version, bound or bounds, and node attributes and way or relation elements.+osm :: String -- ^ The @version@ attribute.+ -> Maybe String -- ^ The @generator@ attribute.+ -> Maybe (Either Bound Bounds) -- ^ The @bound@ or @bounds@ elements.+ -> [NodeWayRelation] -- ^ The @node@, @way@ or @relation@ elements.+ -> OSM+osm = OSM
+ Data/Geo/OSM/Relation.hs view
@@ -0,0 +1,66 @@+-- | The @relation@ element of a OSM file.+module Data.Geo.OSM.Relation(+ Relation,+ relation+ ) where++import Text.XML.HXT.Arrow+import Text.XML.HXT.Extras+import Data.Geo.OSM.Member+import Data.Geo.OSM.NWRCommon+import Data.Geo.OSM.Tag+import Data.Geo.OSM.Accessor.Id+import Data.Geo.OSM.Accessor.Tags+import Data.Geo.OSM.Accessor.Changeset+import Data.Geo.OSM.Accessor.Visible+import Data.Geo.OSM.Accessor.User+import Data.Geo.OSM.Accessor.Uid+import Data.Geo.OSM.Accessor.Timestamp+import Data.Geo.OSM.Accessor.Members+import Prelude hiding (id)++-- | The @relation@ element of a OSM file.+data Relation = Relation [Member] NWRCommon+ deriving Eq++instance XmlPickler Relation where+ xpickle = xpElem "relation" (xpWrap (uncurry Relation, \(Relation m r) -> (m, r))+ (xpPair (xpList xpickle) xpickle))++instance Show Relation where+ show = showPickled []++instance Members Relation where+ members (Relation x _) = x++instance Id Relation where+ id (Relation _ x) = id x++instance Tags Relation where+ tags (Relation _ x) = tags x++instance Changeset Relation where+ changeset (Relation _ x) = changeset x++instance Visible Relation where+ visible (Relation _ x) = visible x++instance User Relation where+ user (Relation _ x) = user x++instance Uid Relation where+ uid (Relation _ x) = uid x++instance Timestamp Relation where+ timestamp (Relation _ x) = timestamp x++-- | Constructs a relation with a list of members, id, list of tags, changeset, visible, user&uid and timestamp.+relation :: [Member] -- ^ The list of members (@member@ elements).+ -> String -- ^ The @id@ attribute.+ -> [Tag] -- ^ The list of tags (@tag@ elements).+ -> Maybe String -- ^ The @changeset@ attribute.+ -> Bool -- ^ The @visible@ attribute.+ -> (Maybe String, Maybe String) -- ^ The @user@ and @uid@ attributes.+ -> Maybe String -- ^ The @timestamp@ attribute.+ -> Relation+relation = (. nwrCommon) . (.) . (.) . (.) . (.) . (.) . Relation
+ Data/Geo/OSM/Tag.hs view
@@ -0,0 +1,32 @@+-- | The @tag@ element of a OSM file.+module Data.Geo.OSM.Tag(+ Tag,+ tag+ ) where++import Text.XML.HXT.Arrow+import Text.XML.HXT.Extras+import Data.Geo.OSM.Accessor.K+import Data.Geo.OSM.Accessor.V++-- | The @tag@ element of a OSM file.+data Tag = Tag String String+ deriving Eq++instance XmlPickler Tag where+ xpickle = xpElem "tag" (xpWrap (uncurry Tag, \(Tag k' v') -> (k', v')) (xpPair (xpAttr "k" xpText) (xpAttr "v" xpText)))++instance Show Tag where+ show = showPickled []++instance K Tag where+ k (Tag x _) = x++instance V Tag where+ v (Tag _ x) = x++-- | Constructs a tag with a key and value.+tag :: String -- ^ The key (@k@ attribute).+ -> String -- ^ The value (@v@ attribute).+ -> Tag+tag = Tag
+ Data/Geo/OSM/Way.hs view
@@ -0,0 +1,66 @@+-- | The @way@ element of a OSM file.+module Data.Geo.OSM.Way(+ Way,+ way+ ) where++import Text.XML.HXT.Arrow+import Text.XML.HXT.Extras+import Data.Geo.OSM.Nd+import Data.Geo.OSM.NWRCommon+import Data.Geo.OSM.Tag+import Data.Geo.OSM.Accessor.Id+import Data.Geo.OSM.Accessor.Tags+import Data.Geo.OSM.Accessor.Changeset+import Data.Geo.OSM.Accessor.Visible+import Data.Geo.OSM.Accessor.User+import Data.Geo.OSM.Accessor.Uid+import Data.Geo.OSM.Accessor.Timestamp+import Data.Geo.OSM.Accessor.Nds+import Prelude hiding (id)++-- | The @way@ element of a OSM file.+data Way = Way [Nd] NWRCommon+ deriving Eq++instance XmlPickler Way where+ xpickle = xpElem "way" (xpWrap (uncurry Way, \(Way n r) -> (n, r))+ (xpPair (xpList xpickle) xpickle))++instance Show Way where+ show = showPickled []++instance Nds Way where+ nds (Way x _) = x++instance Id Way where+ id (Way _ x) = id x++instance Tags Way where+ tags (Way _ x) = tags x++instance Changeset Way where+ changeset (Way _ x) = changeset x++instance Visible Way where+ visible (Way _ x) = visible x++instance User Way where+ user (Way _ x) = user x++instance Uid Way where+ uid (Way _ x) = uid x++instance Timestamp Way where+ timestamp (Way _ x) = timestamp x++-- | Constructs a way with a list of nds, id, list of tags, changeset, visible, user&uid and timestamp.+way :: [Nd] -- ^ The list of nds (@nd@ elements).+ -> String -- ^ The @id@ attribute.+ -> [Tag] -- ^ The list of tags (@tag@ elements).+ -> Maybe String -- ^ The @changeset@ attribute.+ -> Bool -- ^ The @visible@ attribute.+ -> (Maybe String, Maybe String) -- ^ The @user@ and @uid@ attributes.+ -> Maybe String -- ^ The @timestamp@ attribute.+ -> Way+way = (. nwrCommon) . (.) . (.) . (.) . (.) . (.) . Way
− Geo/OSM.hs
@@ -1,80 +0,0 @@-module Geo.OSM(- module Text.XML.HXT.Arrow,- module Geo.OSM.Bound,- module Geo.OSM.Bounds,- module Geo.OSM.Member,- module Geo.OSM.MemberType,- module Geo.OSM.Nd,- module Geo.OSM.Node,- module Geo.OSM.NodeWayRelation,- module Geo.OSM.OSM,- module Geo.OSM.Relation,- module Geo.OSM.Tag,- module Geo.OSM.Way,- module Geo.OSM.Accessor.BoundOrs,- module Geo.OSM.Accessor.Box,- module Geo.OSM.Accessor.Changeset,- module Geo.OSM.Accessor.Generator,- module Geo.OSM.Accessor.Id,- module Geo.OSM.Accessor.K,- module Geo.OSM.Accessor.Lat,- module Geo.OSM.Accessor.Lon,- module Geo.OSM.Accessor.Maxlat,- module Geo.OSM.Accessor.Maxlon,- module Geo.OSM.Accessor.Members,- module Geo.OSM.Accessor.Minlat,- module Geo.OSM.Accessor.Minlon,- module Geo.OSM.Accessor.Mtype,- module Geo.OSM.Accessor.Nds,- module Geo.OSM.Accessor.NodeWayRelations,- module Geo.OSM.Accessor.Origin,- module Geo.OSM.Accessor.Ref,- module Geo.OSM.Accessor.Role,- module Geo.OSM.Accessor.Tags,- module Geo.OSM.Accessor.Timestamp,- module Geo.OSM.Accessor.Uid,- module Geo.OSM.Accessor.User,- module Geo.OSM.Accessor.Version,- module Geo.OSM.Accessor.V,- module Geo.OSM.Accessor.Visible- ) where---import Text.XML.HXT.Arrow-import Geo.OSM.Bound-import Geo.OSM.Bounds-import Geo.OSM.Member-import Geo.OSM.MemberType-import Geo.OSM.Nd-import Geo.OSM.Node-import Geo.OSM.NodeWayRelation-import Geo.OSM.OSM-import Geo.OSM.Relation-import Geo.OSM.Tag-import Geo.OSM.Way-import Geo.OSM.Accessor.BoundOrs-import Geo.OSM.Accessor.Box-import Geo.OSM.Accessor.Changeset-import Geo.OSM.Accessor.Generator-import Geo.OSM.Accessor.Id-import Geo.OSM.Accessor.K-import Geo.OSM.Accessor.Lat-import Geo.OSM.Accessor.Lon-import Geo.OSM.Accessor.Maxlat-import Geo.OSM.Accessor.Maxlon-import Geo.OSM.Accessor.Members-import Geo.OSM.Accessor.Minlat-import Geo.OSM.Accessor.Minlon-import Geo.OSM.Accessor.Mtype-import Geo.OSM.Accessor.Nds-import Geo.OSM.Accessor.NodeWayRelations-import Geo.OSM.Accessor.Origin-import Geo.OSM.Accessor.Ref-import Geo.OSM.Accessor.Role-import Geo.OSM.Accessor.Tags-import Geo.OSM.Accessor.Timestamp-import Geo.OSM.Accessor.Uid-import Geo.OSM.Accessor.User-import Geo.OSM.Accessor.Version-import Geo.OSM.Accessor.V-import Geo.OSM.Accessor.Visible
− Geo/OSM/Accessor/BoundOrs.hs
@@ -1,8 +0,0 @@--- | Values with a @bounds@ accessor which is either empty, a @Bound@ or a @Bounds@.-module Geo.OSM.Accessor.BoundOrs where--import Geo.OSM.Bound-import Geo.OSM.Bounds--class BoundOrs a where- boundOrs :: a -> x -> (Bound -> x) -> (Bounds -> x) -> x
− Geo/OSM/Accessor/Box.hs
@@ -1,5 +0,0 @@--- | Values with a @box@ string accessor.-module Geo.OSM.Accessor.Box where--class Box a where- box :: a -> String
− Geo/OSM/Accessor/Changeset.hs
@@ -1,5 +0,0 @@--- | Values with a @changeset@ optional string accessor.-module Geo.OSM.Accessor.Changeset where--class Changeset a where- changeset :: a -> Maybe String
− Geo/OSM/Accessor/Generator.hs
@@ -1,5 +0,0 @@--- | Values with a @generator@ optional string accessor.-module Geo.OSM.Accessor.Generator where--class Generator a where- generator :: a -> Maybe String
− Geo/OSM/Accessor/Id.hs
@@ -1,5 +0,0 @@--- | Values with a @id@ string accessor.-module Geo.OSM.Accessor.Id where--class Id a where- id :: a -> String
− Geo/OSM/Accessor/K.hs
@@ -1,5 +0,0 @@--- | Values with a @k@ string accessor.-module Geo.OSM.Accessor.K where--class K a where- k :: a -> String
− Geo/OSM/Accessor/Lat.hs
@@ -1,5 +0,0 @@--- | Values with a @lat@ string accessor.-module Geo.OSM.Accessor.Lat where--class Lat a where- lat :: a -> String
− Geo/OSM/Accessor/Lon.hs
@@ -1,5 +0,0 @@--- | Values with a @lon@ string accessor.-module Geo.OSM.Accessor.Lon where--class Lon a where- lon :: a -> String
− Geo/OSM/Accessor/Maxlat.hs
@@ -1,5 +0,0 @@--- | Values with a @maxlat@ string accessor.-module Geo.OSM.Accessor.Maxlat where--class Maxlat a where- maxlat :: a -> String
− Geo/OSM/Accessor/Maxlon.hs
@@ -1,5 +0,0 @@--- -- | Values with a @maxlon@ string accessor.-module Geo.OSM.Accessor.Maxlon where--class Maxlon a where- maxlon :: a -> String
− Geo/OSM/Accessor/Members.hs
@@ -1,7 +0,0 @@--- | Values with a @member@ accessor that is a list of @Member@.-module Geo.OSM.Accessor.Members where--import Geo.OSM.Member--class Members a where- members :: a -> [Member]
− Geo/OSM/Accessor/Minlat.hs
@@ -1,5 +0,0 @@--- | Values with a @minlat@ string accessor.-module Geo.OSM.Accessor.Minlat where--class Minlat a where- minlat :: a -> String
− Geo/OSM/Accessor/Minlon.hs
@@ -1,5 +0,0 @@--- | Values with a @minlon@ string accessor.-module Geo.OSM.Accessor.Minlon where--class Minlon a where- minlon :: a -> String
− Geo/OSM/Accessor/Mtype.hs
@@ -1,7 +0,0 @@--- | Values with a @type@ accessor.-module Geo.OSM.Accessor.Mtype where--import Geo.OSM.MemberType--class Mtype a where- mtype :: a -> MemberType
− Geo/OSM/Accessor/Nds.hs
@@ -1,7 +0,0 @@--- | Values with a @nd@ accessor that is a list of @Nd@.-module Geo.OSM.Accessor.Nds where--import Geo.OSM.Nd--class Nds a where- nds :: a -> [Nd]
− Geo/OSM/Accessor/NodeWayRelations.hs
@@ -1,19 +0,0 @@--- | Values with a @nwrs@ accessor that is a list of @NodeWayRelation@.-module Geo.OSM.Accessor.NodeWayRelations where--import Geo.OSM.NodeWayRelation-import Geo.OSM.Node-import Geo.OSM.Way-import Geo.OSM.Relation--class NodeWayRelations a where- nwrs :: a -> [NodeWayRelation]--nodes :: (NodeWayRelations a) => a -> [Node]-nodes k = nwrs k >>= \t -> foldNodeWayRelation t return (const []) (const [])--ways :: (NodeWayRelations a) => a -> [Way]-ways k = nwrs k >>= \t -> foldNodeWayRelation t (const []) return (const [])--relations :: (NodeWayRelations a) => a -> [Relation]-relations k = nwrs k >>= \t -> foldNodeWayRelation t (const []) (const []) return
− Geo/OSM/Accessor/Origin.hs
@@ -1,5 +0,0 @@--- | Values with a @origin@ optional string accessor.-module Geo.OSM.Accessor.Origin where--class Origin a where- origin :: a -> Maybe String
− Geo/OSM/Accessor/Ref.hs
@@ -1,5 +0,0 @@--- | Values with a @ref@ string accessor.-module Geo.OSM.Accessor.Ref where--class Ref a where- ref :: a -> String
− Geo/OSM/Accessor/Role.hs
@@ -1,5 +0,0 @@--- | Values with a @role@ string accessor.-module Geo.OSM.Accessor.Role where--class Role a where- role :: a -> String
− Geo/OSM/Accessor/Tags.hs
@@ -1,19 +0,0 @@--- | Values with a @tags@ accessor that is a list of tags.-module Geo.OSM.Accessor.Tags where--import Geo.OSM.Tag-import Geo.OSM.Accessor.K-import Geo.OSM.Accessor.V-import qualified Data.Map as M-import Control.Arrow-import Data.Foldable-import Prelude hiding (any)--class Tags a where- tags :: a -> [Tag]--tagMap :: (Tags a) => a -> M.Map String String-tagMap = M.fromList . map (k &&& v) . tags--hasTagValue :: (Tags a) => String -> String -> a -> Bool-hasTagValue k' v' n = any (== v') (k' `M.lookup` tagMap n)
− Geo/OSM/Accessor/Timestamp.hs
@@ -1,5 +0,0 @@--- | Values with a @timestamp@ optional string accessor.-module Geo.OSM.Accessor.Timestamp where--class Timestamp a where- timestamp :: a -> Maybe String
− Geo/OSM/Accessor/Uid.hs
@@ -1,5 +0,0 @@--- | Values with a @uid@ optional string accessor.-module Geo.OSM.Accessor.Uid where--class Uid a where- uid :: a -> Maybe String
− Geo/OSM/Accessor/User.hs
@@ -1,5 +0,0 @@--- | Values with a @user@ optional string accessor.-module Geo.OSM.Accessor.User where--class User a where- user :: a -> Maybe String
− Geo/OSM/Accessor/V.hs
@@ -1,5 +0,0 @@--- | Values with a @v@ string accessor.-module Geo.OSM.Accessor.V where--class V a where- v :: a -> String
− Geo/OSM/Accessor/Version.hs
@@ -1,5 +0,0 @@--- | Values with a @version@ string accessor.-module Geo.OSM.Accessor.Version where--class Version a where- version :: a -> String
− Geo/OSM/Accessor/Visible.hs
@@ -1,5 +0,0 @@--- | Values with a @visible@ boolean accessor.-module Geo.OSM.Accessor.Visible where--class Visible a where- visible :: a -> Bool
− Geo/OSM/Bound.hs
@@ -1,32 +0,0 @@--- | The @bound@ element of a OSM file.-module Geo.OSM.Bound(- Bound,- bound- ) where--import Text.XML.HXT.Arrow-import Text.XML.HXT.Extras-import Geo.OSM.Accessor.Box-import Geo.OSM.Accessor.Origin---- | The @bound@ element of a OSM file.-data Bound = Bound String (Maybe String)- deriving Eq--instance XmlPickler Bound where- xpickle = xpElem "bound" (xpWrap (uncurry Bound, \(Bound b o) -> (b, o)) (xpPair (xpAttr "box" xpText) (xpOption (xpAttr "origin" xpText))))--instance Show Bound where- show = showPickled []--instance Box Bound where- box (Bound x _) = x--instance Origin Bound where- origin (Bound _ x) = x---- | Constructs a bound with a box and origin attributes.-bound :: String -- ^ The @box@ attribute.- -> Maybe String -- ^ The @origin@ attribute.- -> Bound-bound = Bound
− Geo/OSM/Bounds.hs
@@ -1,48 +0,0 @@--- | The @bounds@ element of a OSM file.-module Geo.OSM.Bounds(- Bounds,- bounds- ) where--import Text.XML.HXT.Arrow-import Text.XML.HXT.Extras-import Geo.OSM.Accessor.Minlat-import Geo.OSM.Accessor.Maxlat-import Geo.OSM.Accessor.Minlon-import Geo.OSM.Accessor.Maxlon-import Geo.OSM.Accessor.Origin---- | The @bounds@ element of a OSM file.-data Bounds = Bounds String String String String (Maybe String)- deriving Eq--instance XmlPickler Bounds where- xpickle = xpElem "bounds" (xpWrap (\(minlat', minlon', maxlat', maxlon', origin') -> Bounds minlat' minlon' maxlat' maxlon' origin', \(Bounds minlat' minlon' maxlat' maxlon' origin') -> (minlat', minlon', maxlat', maxlon', origin'))- (xp5Tuple (xpAttr "minlat" xpText) (xpAttr "minlon" xpText) (xpAttr "maxlat" xpText) (xpAttr "maxlon" xpText) (xpOption (xpAttr "origin" xpText))))--instance Show Bounds where- show = showPickled []--instance Minlat Bounds where- minlat (Bounds x _ _ _ _) = x--instance Minlon Bounds where- minlon (Bounds _ x _ _ _) = x--instance Maxlat Bounds where- maxlat (Bounds _ _ x _ _) = x--instance Maxlon Bounds where- maxlon (Bounds _ _ _ x _) = x--instance Origin Bounds where- origin (Bounds _ _ _ _ x) = x---- | Constructs a bounds with a minlat, minlon, maxlat, maxlon and origin attributes.-bounds :: String -- ^ The @minlat@ attribute.- -> String -- ^ The @minlon@ attribute.- -> String -- ^ The @maxlat@ attribute.- -> String -- ^ The @maxlon@ attribute.- -> Maybe String -- ^ The @origin@ attribute.- -> Bounds-bounds = Bounds
− Geo/OSM/Member.hs
@@ -1,39 +0,0 @@--- | The @member@ element of a OSM file.-module Geo.OSM.Member(- Member,- member- ) where--import Text.XML.HXT.Arrow-import Text.XML.HXT.Extras-import Geo.OSM.MemberType-import Geo.OSM.Accessor.Mtype-import Geo.OSM.Accessor.Ref-import Geo.OSM.Accessor.Role---- | The @member@ element of a OSM file.-data Member = Member MemberType String String- deriving Eq--instance XmlPickler Member where- xpickle = xpElem "member" (xpWrap (\(mtype', mref', mrole') -> Member mtype' mref' mrole', \(Member mtype' mref' mrole') -> (mtype', mref', mrole'))- (xpTriple xpickle (xpAttr "ref" xpText) (xpAttr "role" xpText)))--instance Show Member where- show = showPickled []--instance Mtype Member where- mtype (Member x _ _) = x--instance Ref Member where- ref (Member _ x _) = x--instance Role Member where- role (Member _ _ x) = x---- | Constructs a member with a type, ref and role.-member :: MemberType -- ^ The member @type@ attribute.- -> String -- ^ The member @ref@ attribute.- -> String -- ^ The member @role@ attribute.- -> Member-member = Member
− Geo/OSM/MemberType.hs
@@ -1,51 +0,0 @@--- | The @type@ attribute of a @member@ element of a OSM file.-module Geo.OSM.MemberType(- MemberType,- foldMemberType,- wayType,- nodeType,- relationType- ) where--import Text.XML.HXT.Arrow-import Text.XML.HXT.Extras-import Control.Applicative-import Data.Char---- | The @type@ attribute of a @member@ element of a OSM file.-data MemberType = WayType | NodeType | RelationType- deriving Eq---- | Folds a member-type (catamorphism).-foldMemberType :: MemberType -- ^ The member-type to fold.- -> x -- ^ If the type is a way.- -> x -- ^ If the type is a node.- -> x -- ^ If the type is a relation.- -> x-foldMemberType WayType x _ _ = x-foldMemberType NodeType _ x _ = x-foldMemberType RelationType _ _ x = x--instance XmlPickler MemberType where- xpickle = xpWrapMaybe (\s -> case toLower <$> s of "way" -> Just WayType- "node" -> Just NodeType- "relation" -> Just RelationType- _ -> Nothing,- \t -> case t of WayType -> "way"- NodeType -> "node"- RelationType -> "relation") (xpAttr "type" xpText)--instance Show MemberType where- show = showPickled []---- | Constructs a member-type that is a way.-wayType :: MemberType-wayType = WayType---- | Constructs a member-type that is a node.-nodeType :: MemberType-nodeType = NodeType---- | Constructs a member-type that is a relation.-relationType :: MemberType-relationType = RelationType
− Geo/OSM/NWRCommon.hs
@@ -1,67 +0,0 @@--- | The common attributes between the @node@, @way@ and @relation@ elements.-module Geo.OSM.NWRCommon(- NWRCommon,- nwrCommon- ) where--import Text.XML.HXT.Arrow-import Text.XML.HXT.Extras-import Control.Applicative-import Data.Char-import Geo.OSM.Tag-import Geo.OSM.Accessor.Id-import Geo.OSM.Accessor.Tags-import Geo.OSM.Accessor.Changeset-import Geo.OSM.Accessor.Visible-import Geo.OSM.Accessor.User-import Geo.OSM.Accessor.Uid-import Geo.OSM.Accessor.Timestamp---- | The common attributes between the @node@, @way@ and @relation@ elements.-data NWRCommon = NWRCommon String [Tag] (Maybe String) Bool (Maybe String, Maybe String) (Maybe String)- deriving Eq--instance XmlPickler NWRCommon where- xpickle = xpWrap (\(a, b, c, d, e, f) -> NWRCommon a b c d e f, \(NWRCommon a b c d e f) -> (a, b, c, d, e, f))- (xp6Tuple (xpAttr "id" xpText)- (xpList xpickle)- (xpOption (xpAttr "changeset" xpText))- (xpDefault True (xpWrapMaybe (\s -> case toLower <$> s of "true" -> Just True- "false" -> Just False- _ -> Nothing, (toLower <$>) . show) (xpAttr "visible" xpText)))- (xpPair (xpOption (xpAttr "user" xpText)) (xpOption (xpAttr "uid" xpText)))- (xpOption (xpAttr "timestamp" xpText)))--instance Show NWRCommon where- show = showPickled []--instance Id NWRCommon where- id (NWRCommon x _ _ _ _ _) = x--instance Tags NWRCommon where- tags (NWRCommon _ x _ _ _ _) = x--instance Changeset NWRCommon where- changeset (NWRCommon _ _ x _ _ _) = x--instance Visible NWRCommon where- visible (NWRCommon _ _ _ x _ _) = x--instance User NWRCommon where- user (NWRCommon _ _ _ _ (x, _) _) = x--instance Uid NWRCommon where- uid (NWRCommon _ _ _ _ (_, x) _) = x--instance Timestamp NWRCommon where- timestamp (NWRCommon _ _ _ _ _ x) = x---- | Constructs with id, list of tags, changeset, visible, user&uid and timestamp.-nwrCommon :: String -- ^ The @id@ attribute.- -> [Tag] -- ^ The list of tags (@tag@ elements).- -> Maybe String -- ^ The @changeset@ attribute.- -> Bool -- ^ The @visible@ attribute.- -> (Maybe String, Maybe String) -- ^ The @user@ and @uid@ attributes.- -> Maybe String -- ^ The @timestamp@ attribute.- -> NWRCommon-nwrCommon = NWRCommon
− Geo/OSM/Nd.hs
@@ -1,27 +0,0 @@--- | The @nd@ element of a OSM file.-module Geo.OSM.Nd(- Nd,- nd- ) where--import Text.XML.HXT.Arrow-import Text.XML.HXT.Extras-import Geo.OSM.Accessor.Ref---- | The @nd@ element of a OSM file.-newtype Nd = Nd String- deriving Eq--instance XmlPickler Nd where- xpickle = xpElem "nd" (xpWrap (Nd, \(Nd r) -> r) (xpAttr "ref" xpText))--instance Show Nd where- show = showPickled []--instance Ref Nd where- ref (Nd x) = x---- | Constructs a nd with a ref.-nd :: String -- ^ The @ref@ attribute.- -> Nd-nd = Nd
− Geo/OSM/Node.hs
@@ -1,70 +0,0 @@--- | The @node@ element of a OSM file.-module Geo.OSM.Node(- Node,- node- ) where--import Text.XML.HXT.Arrow-import Text.XML.HXT.Extras-import Geo.OSM.NWRCommon-import Geo.OSM.Tag-import Geo.OSM.Accessor.Id-import Geo.OSM.Accessor.Tags-import Geo.OSM.Accessor.Changeset-import Geo.OSM.Accessor.Visible-import Geo.OSM.Accessor.User-import Geo.OSM.Accessor.Uid-import Geo.OSM.Accessor.Timestamp-import Geo.OSM.Accessor.Lat-import Geo.OSM.Accessor.Lon-import Prelude hiding (id)---- | The @node@ element of a OSM file.-data Node = Node String String NWRCommon- deriving Eq--instance XmlPickler Node where- xpickle = xpElem "node" (xpWrap (\(lat', lon', nwr') -> Node lat' lon' nwr', \(Node lat' lon' nwr') -> (lat', lon', nwr'))- (xpTriple (xpAttr "lat" xpText) (xpAttr "lon" xpText) xpickle))--instance Show Node where- show = showPickled []--instance Lat Node where- lat (Node x _ _) = x--instance Lon Node where- lon (Node _ x _) = x--instance Id Node where- id (Node _ _ x) = id x--instance Tags Node where- tags (Node _ _ x) = tags x--instance Changeset Node where- changeset (Node _ _ x) = changeset x--instance Visible Node where- visible (Node _ _ x) = visible x--instance User Node where- user (Node _ _ x) = user x--instance Uid Node where- uid (Node _ _ x) = uid x--instance Timestamp Node where- timestamp (Node _ _ x) = timestamp x---- | Constructs a node with a lat, lon, id, list of tags, changeset, visible, user&uid and timestamp.-node :: String -- ^ The @lat@ attribute.- -> String -- ^ The @lon@ attribute.- -> String -- ^ The @id@ attribute.- -> [Tag] -- ^ The list of tags (@tag@ elements).- -> Maybe String -- ^ The @changeset@ attribute.- -> Bool -- ^ The @visible@ attribute.- -> (Maybe String, Maybe String) -- ^ The @user@ and @uid@ attributes.- -> Maybe String -- ^ The @timestamp@ attribute.- -> Node-node = flip flip nwrCommon . (((.) . (.) . (.) . (.) . (.) . (.)) .) . Node
− Geo/OSM/NodeWayRelation.hs
@@ -1,67 +0,0 @@--- | The @node@, @way@, or @relation@ element of a OSM file.-module Geo.OSM.NodeWayRelation(- NodeWayRelation,- foldNodeWayRelation,- way',- relation',- node',- isNode,- isWay,- isRelation- ) where--import Text.XML.HXT.Arrow-import Text.XML.HXT.Extras-import Geo.OSM.Node-import Geo.OSM.Way-import Geo.OSM.Relation---- | The @node@, @way@, or @relation@ element of a OSM file.-data NodeWayRelation = N Node | W Way | R Relation- deriving Eq---- | Folds a node-way-relation (catamorphism).-foldNodeWayRelation :: NodeWayRelation -- ^ The @node@, @way@ or @relation@ element.- -> (Node -> x) -- ^ If this is a @node@ element.- -> (Way -> x) -- ^ If this is a @way@ element.- -> (Relation -> x) -- ^ If this is a @relation@ element.- -> x-foldNodeWayRelation (N n) x _ _ = x n-foldNodeWayRelation (W w) _ x _ = x w-foldNodeWayRelation (R r) _ _ x = x r--instance XmlPickler NodeWayRelation where- xpickle = xpAlt (\r -> case r of N _ -> 0- W _ -> 1- R _ -> 2)- [xpWrap (N, \(N n) -> n) xpickle, xpWrap (W, \(W w) -> w) xpickle, xpWrap (R, \(R r) -> r) xpickle]--instance Show NodeWayRelation where- show = showPickled []---- | Construct a @way@ element value.-way' :: Way -> NodeWayRelation-way' = W---- | Construct a @relation@ element value.-relation' :: Relation -> NodeWayRelation-relation' = R---- | Construct a @node@ element value.-node' :: Node -> NodeWayRelation-node' = N---- | Returns whether the @node@, @way@ or @relation@ element is a node.-isNode :: NodeWayRelation -> Bool-isNode (N _) = True-isNode _ = False---- | Returns whether the @node@, @way@ or @relation@ element is a way.-isWay :: NodeWayRelation -> Bool-isWay (W _) = True-isWay _ = False---- | Returns whether the @node@, @way@ or @relation@ element is a relation.-isRelation :: NodeWayRelation -> Bool-isRelation (R _) = True-isRelation _ = False
− Geo/OSM/OSM.hs
@@ -1,51 +0,0 @@--- | The @osm@ element of a OSM file, which is the root element.-module Geo.OSM.OSM(- OSM,- osm- ) where--import Text.XML.HXT.Arrow-import Text.XML.HXT.Extras-import Geo.OSM.NodeWayRelation-import Geo.OSM.Bound-import Geo.OSM.Bounds-import Geo.OSM.Accessor.Version-import Geo.OSM.Accessor.Generator-import Geo.OSM.Accessor.BoundOrs-import Geo.OSM.Accessor.NodeWayRelations---- | The @osm@ element of a OSM file, which is the root element.-data OSM = OSM String (Maybe String) (Maybe (Either Bound Bounds)) [NodeWayRelation]- deriving Eq--instance XmlPickler OSM where- xpickle = xpElem "osm" (xpWrap (\(version', generator', bound', nwr') -> OSM version' generator' bound' nwr', \(OSM version' generator' bound' nwr') -> (version', generator', bound', nwr'))- (xp4Tuple (xpAttr "version" xpText)- (xpOption (xpAttr "generator" xpText))- (xpOption (xpAlt (either (const 0) (const 1)) [xpWrap (Left, \(Left b) -> b) xpickle, xpWrap (Right, \(Right b) -> b) xpickle]))- (xpList1 xpickle)))--instance Show OSM where- show = showPickled []--instance Version OSM where- version (OSM x _ _ _) = x--instance Generator OSM where- generator (OSM _ x _ _) = x--instance BoundOrs OSM where- boundOrs (OSM _ _ x _) n b bs = case x of Nothing -> n- Just (Left b') -> b b'- Just (Right b') -> bs b'--instance NodeWayRelations OSM where- nwrs (OSM _ _ _ x) = x---- | Constructs a osm with a version, bound or bounds, and node attributes and way or relation elements.-osm :: String -- ^ The @version@ attribute.- -> Maybe String -- ^ The @generator@ attribute.- -> Maybe (Either Bound Bounds) -- ^ The @bound@ or @bounds@ elements.- -> [NodeWayRelation] -- ^ The @node@, @way@ or @relation@ elements.- -> OSM-osm = OSM
− Geo/OSM/Relation.hs
@@ -1,66 +0,0 @@--- | The @relation@ element of a OSM file.-module Geo.OSM.Relation(- Relation,- relation- ) where--import Text.XML.HXT.Arrow-import Text.XML.HXT.Extras-import Geo.OSM.Member-import Geo.OSM.NWRCommon-import Geo.OSM.Tag-import Geo.OSM.Accessor.Id-import Geo.OSM.Accessor.Tags-import Geo.OSM.Accessor.Changeset-import Geo.OSM.Accessor.Visible-import Geo.OSM.Accessor.User-import Geo.OSM.Accessor.Uid-import Geo.OSM.Accessor.Timestamp-import Geo.OSM.Accessor.Members-import Prelude hiding (id)---- | The @relation@ element of a OSM file.-data Relation = Relation [Member] NWRCommon- deriving Eq--instance XmlPickler Relation where- xpickle = xpElem "relation" (xpWrap (uncurry Relation, \(Relation m r) -> (m, r))- (xpPair (xpList xpickle) xpickle))--instance Show Relation where- show = showPickled []--instance Members Relation where- members (Relation x _) = x--instance Id Relation where- id (Relation _ x) = id x--instance Tags Relation where- tags (Relation _ x) = tags x--instance Changeset Relation where- changeset (Relation _ x) = changeset x--instance Visible Relation where- visible (Relation _ x) = visible x--instance User Relation where- user (Relation _ x) = user x--instance Uid Relation where- uid (Relation _ x) = uid x--instance Timestamp Relation where- timestamp (Relation _ x) = timestamp x---- | Constructs a relation with a list of members, id, list of tags, changeset, visible, user&uid and timestamp.-relation :: [Member] -- ^ The list of members (@member@ elements).- -> String -- ^ The @id@ attribute.- -> [Tag] -- ^ The list of tags (@tag@ elements).- -> Maybe String -- ^ The @changeset@ attribute.- -> Bool -- ^ The @visible@ attribute.- -> (Maybe String, Maybe String) -- ^ The @user@ and @uid@ attributes.- -> Maybe String -- ^ The @timestamp@ attribute.- -> Relation-relation = (. nwrCommon) . (.) . (.) . (.) . (.) . (.) . Relation
− Geo/OSM/Tag.hs
@@ -1,32 +0,0 @@--- | The @tag@ element of a OSM file.-module Geo.OSM.Tag(- Tag,- tag- ) where--import Text.XML.HXT.Arrow-import Text.XML.HXT.Extras-import Geo.OSM.Accessor.K-import Geo.OSM.Accessor.V---- | The @tag@ element of a OSM file.-data Tag = Tag String String- deriving Eq--instance XmlPickler Tag where- xpickle = xpElem "tag" (xpWrap (uncurry Tag, \(Tag k' v') -> (k', v')) (xpPair (xpAttr "k" xpText) (xpAttr "v" xpText)))--instance Show Tag where- show = showPickled []--instance K Tag where- k (Tag x _) = x--instance V Tag where- v (Tag _ x) = x---- | Constructs a tag with a key and value.-tag :: String -- ^ The key (@k@ attribute).- -> String -- ^ The value (@v@ attribute).- -> Tag-tag = Tag
− Geo/OSM/Way.hs
@@ -1,66 +0,0 @@--- | The @way@ element of a OSM file.-module Geo.OSM.Way(- Way,- way- ) where--import Text.XML.HXT.Arrow-import Text.XML.HXT.Extras-import Geo.OSM.Nd-import Geo.OSM.NWRCommon-import Geo.OSM.Tag-import Geo.OSM.Accessor.Id-import Geo.OSM.Accessor.Tags-import Geo.OSM.Accessor.Changeset-import Geo.OSM.Accessor.Visible-import Geo.OSM.Accessor.User-import Geo.OSM.Accessor.Uid-import Geo.OSM.Accessor.Timestamp-import Geo.OSM.Accessor.Nds-import Prelude hiding (id)---- | The @way@ element of a OSM file.-data Way = Way [Nd] NWRCommon- deriving Eq--instance XmlPickler Way where- xpickle = xpElem "way" (xpWrap (uncurry Way, \(Way n r) -> (n, r))- (xpPair (xpList xpickle) xpickle))--instance Show Way where- show = showPickled []--instance Nds Way where- nds (Way x _) = x--instance Id Way where- id (Way _ x) = id x--instance Tags Way where- tags (Way _ x) = tags x--instance Changeset Way where- changeset (Way _ x) = changeset x--instance Visible Way where- visible (Way _ x) = visible x--instance User Way where- user (Way _ x) = user x--instance Uid Way where- uid (Way _ x) = uid x--instance Timestamp Way where- timestamp (Way _ x) = timestamp x---- | Constructs a way with a list of nds, id, list of tags, changeset, visible, user&uid and timestamp.-way :: [Nd] -- ^ The list of nds (@nd@ elements).- -> String -- ^ The @id@ attribute.- -> [Tag] -- ^ The list of tags (@tag@ elements).- -> Maybe String -- ^ The @changeset@ attribute.- -> Bool -- ^ The @visible@ attribute.- -> (Maybe String, Maybe String) -- ^ The @user@ and @uid@ attributes.- -> Maybe String -- ^ The @timestamp@ attribute.- -> Way-way = (. nwrCommon) . (.) . (.) . (.) . (.) . (.) . Way
OSM.cabal view
@@ -1,5 +1,5 @@ Name: OSM-Version: 0.2+Version: 0.3 License: BSD3 License-File: LICENSE Synopsis: Parse OpenStreetMap files@@ -24,42 +24,42 @@ Build-Depends: base < 3, hxt, hxt-extras, containers GHC-Options: -Wall- Exposed-Modules: Geo.OSM- Geo.OSM.Tag- Geo.OSM.Nd- Geo.OSM.NWRCommon- Geo.OSM.MemberType- Geo.OSM.Member- Geo.OSM.Way- Geo.OSM.Node- Geo.OSM.Relation- Geo.OSM.Bounds- Geo.OSM.Bound- Geo.OSM.NodeWayRelation- Geo.OSM.OSM- Geo.OSM.Accessor.K- Geo.OSM.Accessor.V- Geo.OSM.Accessor.Ref- Geo.OSM.Accessor.Mtype- Geo.OSM.Accessor.Role- Geo.OSM.Accessor.Id- Geo.OSM.Accessor.Tags- Geo.OSM.Accessor.Changeset- Geo.OSM.Accessor.Visible- Geo.OSM.Accessor.User- Geo.OSM.Accessor.Uid- Geo.OSM.Accessor.Timestamp- Geo.OSM.Accessor.Nds- Geo.OSM.Accessor.Lat- Geo.OSM.Accessor.Lon- Geo.OSM.Accessor.Members- Geo.OSM.Accessor.Minlat- Geo.OSM.Accessor.Maxlat- Geo.OSM.Accessor.Minlon- Geo.OSM.Accessor.Maxlon- Geo.OSM.Accessor.Origin- Geo.OSM.Accessor.Box- Geo.OSM.Accessor.Version- Geo.OSM.Accessor.Generator- Geo.OSM.Accessor.BoundOrs- Geo.OSM.Accessor.NodeWayRelations+ Exposed-Modules: Data.Geo.OSM+ Data.Geo.OSM.Tag+ Data.Geo.OSM.Nd+ Data.Geo.OSM.NWRCommon+ Data.Geo.OSM.MemberType+ Data.Geo.OSM.Member+ Data.Geo.OSM.Way+ Data.Geo.OSM.Node+ Data.Geo.OSM.Relation+ Data.Geo.OSM.Bounds+ Data.Geo.OSM.Bound+ Data.Geo.OSM.NodeWayRelation+ Data.Geo.OSM.OSM+ Data.Geo.OSM.Accessor.K+ Data.Geo.OSM.Accessor.V+ Data.Geo.OSM.Accessor.Ref+ Data.Geo.OSM.Accessor.Mtype+ Data.Geo.OSM.Accessor.Role+ Data.Geo.OSM.Accessor.Id+ Data.Geo.OSM.Accessor.Tags+ Data.Geo.OSM.Accessor.Changeset+ Data.Geo.OSM.Accessor.Visible+ Data.Geo.OSM.Accessor.User+ Data.Geo.OSM.Accessor.Uid+ Data.Geo.OSM.Accessor.Timestamp+ Data.Geo.OSM.Accessor.Nds+ Data.Geo.OSM.Accessor.Lat+ Data.Geo.OSM.Accessor.Lon+ Data.Geo.OSM.Accessor.Members+ Data.Geo.OSM.Accessor.Minlat+ Data.Geo.OSM.Accessor.Maxlat+ Data.Geo.OSM.Accessor.Minlon+ Data.Geo.OSM.Accessor.Maxlon+ Data.Geo.OSM.Accessor.Origin+ Data.Geo.OSM.Accessor.Box+ Data.Geo.OSM.Accessor.Version+ Data.Geo.OSM.Accessor.Generator+ Data.Geo.OSM.Accessor.BoundOrs+ Data.Geo.OSM.Accessor.NodeWayRelations