GPX 0.1 → 0.2
raw patch · 8 files changed
+92/−9 lines, 8 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.Geo.GPX.Accessor.Latlon: class Latlon a
+ Data.Geo.GPX.Accessor.Latlon: instance (Real a, Real b) => Latlon (a, b)
+ Data.Geo.GPX.Accessor.Latlon: latlon :: (Latlon a) => a -> (Double, Double)
+ Data.Geo.GPX.Gpx: instance Author Gpx (Maybe PersonType)
+ Data.Geo.GPX.Gpx: instance Bounds Gpx
+ Data.Geo.GPX.Gpx: instance Copyright Gpx
+ Data.Geo.GPX.Gpx: instance Creator Gpx
+ Data.Geo.GPX.Gpx: instance Desc Gpx
+ Data.Geo.GPX.Gpx: instance Extensions Gpx
+ Data.Geo.GPX.Gpx: instance Keywords Gpx
+ Data.Geo.GPX.Gpx: instance Links Gpx
+ Data.Geo.GPX.Gpx: instance Metadata Gpx
+ Data.Geo.GPX.Gpx: instance Name Gpx
+ Data.Geo.GPX.Gpx: instance Rtes Gpx
+ Data.Geo.GPX.Gpx: instance Time Gpx
+ Data.Geo.GPX.Gpx: instance Trks Gpx
+ Data.Geo.GPX.Gpx: instance Version Gpx
+ Data.Geo.GPX.Gpx: instance Wpts Gpx
+ Data.Geo.GPX.Gpx: readGpxFile :: FilePath -> IO [Gpx]
+ Data.Geo.GPX.GpxType: instance Author GpxType (Maybe PersonType)
+ Data.Geo.GPX.GpxType: instance Bounds GpxType
+ Data.Geo.GPX.GpxType: instance Copyright GpxType
+ Data.Geo.GPX.GpxType: instance Desc GpxType
+ Data.Geo.GPX.GpxType: instance Keywords GpxType
+ Data.Geo.GPX.GpxType: instance Links GpxType
+ Data.Geo.GPX.GpxType: instance Name GpxType
+ Data.Geo.GPX.GpxType: instance Time GpxType
+ Data.Geo.GPX.LatitudeType: instance Enum LatitudeType
+ Data.Geo.GPX.LatitudeType: instance Floating LatitudeType
+ Data.Geo.GPX.LatitudeType: instance Fractional LatitudeType
+ Data.Geo.GPX.LatitudeType: instance Num LatitudeType
+ Data.Geo.GPX.LatitudeType: instance Ord LatitudeType
+ Data.Geo.GPX.LatitudeType: instance Real LatitudeType
+ Data.Geo.GPX.LatitudeType: instance RealFloat LatitudeType
+ Data.Geo.GPX.LatitudeType: instance RealFrac LatitudeType
+ Data.Geo.GPX.LongitudeType: instance Enum LongitudeType
+ Data.Geo.GPX.LongitudeType: instance Floating LongitudeType
+ Data.Geo.GPX.LongitudeType: instance Fractional LongitudeType
+ Data.Geo.GPX.LongitudeType: instance Num LongitudeType
+ Data.Geo.GPX.LongitudeType: instance Ord LongitudeType
+ Data.Geo.GPX.LongitudeType: instance Real LongitudeType
+ Data.Geo.GPX.LongitudeType: instance RealFloat LongitudeType
+ Data.Geo.GPX.LongitudeType: instance RealFrac LongitudeType
+ Data.Geo.GPX.WptType: instance Latlon WptType
Files
- Data/Geo/GPX.hs +5/−1
- Data/Geo/GPX/Accessor/Latlon.hs +13/−0
- Data/Geo/GPX/Gpx.hs +27/−3
- Data/Geo/GPX/GpxType.hs +36/−0
- Data/Geo/GPX/LatitudeType.hs +2/−2
- Data/Geo/GPX/LongitudeType.hs +2/−2
- Data/Geo/GPX/WptType.hs +5/−0
- GPX.cabal +2/−1
Data/Geo/GPX.hs view
@@ -68,7 +68,9 @@ module Data.Geo.GPX.Accessor.Number, module Data.Geo.GPX.Accessor.Rtepts, module Data.Geo.GPX.Accessor.Trkpts,- module Data.Geo.GPX.Accessor.Trksegs+ module Data.Geo.GPX.Accessor.Trksegs,+ module Data.Geo.GPX.Accessor.Latlon,+ module Control.Arrow ) where import Data.Geo.GPX.DgpsStationType@@ -140,3 +142,5 @@ import Data.Geo.GPX.Accessor.Rtepts import Data.Geo.GPX.Accessor.Trkpts import Data.Geo.GPX.Accessor.Trksegs+import Data.Geo.GPX.Accessor.Latlon+import Control.Arrow
+ Data/Geo/GPX/Accessor/Latlon.hs view
@@ -0,0 +1,13 @@+{-# LANGUAGE FlexibleContexts, FlexibleInstances, UndecidableInstances #-}++module Data.Geo.GPX.Accessor.Latlon where++import Data.Geo.GPX.LatitudeType+import Data.Geo.GPX.LongitudeType+import Data.Geo.GPX.Accessor.Value++class Latlon a where+ latlon :: a -> (Double, Double)++instance (Real a, Real b) => Latlon (a, b) where+ latlon (a, b) = (realToFrac a, realToFrac b)
Data/Geo/GPX/Gpx.hs view
@@ -1,18 +1,38 @@-{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, GeneralizedNewtypeDeriving #-} -- | Element: @gpx@ <http://www.topografix.com/GPX/1/1/#element_gpx> module Data.Geo.GPX.Gpx( Gpx,- gpx+ gpx,+ readGpxFile ) where import Text.XML.HXT.Arrow import Data.Geo.GPX.GpxType+import Data.Geo.GPX.PersonType import Data.Geo.GPX.Accessor.Value+import Data.Geo.GPX.Accessor.Version+import Data.Geo.GPX.Accessor.Creator+import Data.Geo.GPX.Accessor.Metadata+import Data.Geo.GPX.Accessor.Wpts+import Data.Geo.GPX.Accessor.Rtes+import Data.Geo.GPX.Accessor.Trks+import Data.Geo.GPX.Accessor.Extensions+import Data.Geo.GPX.Accessor.Name+import Data.Geo.GPX.Accessor.Desc+import Data.Geo.GPX.Accessor.Author+import Data.Geo.GPX.Accessor.Copyright+import Data.Geo.GPX.Accessor.Links+import Data.Geo.GPX.Accessor.Time+import Data.Geo.GPX.Accessor.Keywords+import Data.Geo.GPX.Accessor.Bounds newtype Gpx = Gpx GpxType- deriving Eq+ deriving (Eq, Version, Creator, Metadata, Wpts, Rtes, Trks, Extensions, Name, Desc, Copyright, Links, Time, Keywords, Bounds) +instance Author Gpx (Maybe PersonType) where+ author = author . value+ gpx :: GpxType -- ^ The gpx element contents. -> Gpx gpx = Gpx@@ -25,3 +45,7 @@ instance Value Gpx GpxType where value (Gpx x) = x++-- | Reads a GPX file into a list of @Gpx@ values removing whitespace.+readGpxFile :: FilePath -> IO [Gpx]+readGpxFile = runX . xunpickleDocument (xpickle :: PU Gpx) [(a_remove_whitespace, v_1)]
Data/Geo/GPX/GpxType.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}+ -- | Complex Type: @gpxType@ <http://www.topografix.com/GPX/1/1/#type_gpxType> module Data.Geo.GPX.GpxType( GpxType,@@ -9,6 +11,7 @@ import Data.Geo.GPX.RteType import Data.Geo.GPX.TrkType import Data.Geo.GPX.ExtensionsType+import Data.Geo.GPX.PersonType import Data.Geo.GPX.Accessor.Version import Data.Geo.GPX.Accessor.Creator import Data.Geo.GPX.Accessor.Metadata@@ -16,8 +19,17 @@ import Data.Geo.GPX.Accessor.Rtes import Data.Geo.GPX.Accessor.Trks import Data.Geo.GPX.Accessor.Extensions+import Data.Geo.GPX.Accessor.Name+import Data.Geo.GPX.Accessor.Desc+import Data.Geo.GPX.Accessor.Author+import Data.Geo.GPX.Accessor.Copyright+import Data.Geo.GPX.Accessor.Links+import Data.Geo.GPX.Accessor.Time+import Data.Geo.GPX.Accessor.Keywords+import Data.Geo.GPX.Accessor.Bounds import Text.XML.HXT.Arrow import Text.XML.HXT.Extras+import Data.Maybe data GpxType = GpxType String String (Maybe MetadataType) [WptType] [RteType] [TrkType] (Maybe ExtensionsType) deriving (Eq, Show)@@ -63,3 +75,27 @@ instance Extensions GpxType where extensions (GpxType _ _ _ _ _ _ x) = x++instance Name GpxType where+ name = (name =<<) . metadata++instance Desc GpxType where+ desc = (desc =<<) . metadata++instance Author GpxType (Maybe PersonType) where+ author = (author =<<) . metadata++instance Copyright GpxType where+ copyright = (copyright =<<) . metadata++instance Links GpxType where+ links = (links =<<) . maybeToList . metadata++instance Time GpxType where+ time = (time =<<) . metadata++instance Keywords GpxType where+ keywords = (keywords =<<) . metadata++instance Bounds GpxType where+ bounds = (bounds =<<) . metadata
Data/Geo/GPX/LatitudeType.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses, GeneralizedNewtypeDeriving #-} -- | Simple Type: @latitudeType@ <http://www.topografix.com/GPX/1/1/#type_latitudeType> module Data.Geo.GPX.LatitudeType(@@ -11,7 +11,7 @@ import Text.XML.HXT.Arrow newtype LatitudeType = LatitudeType Double- deriving Eq+ deriving (Eq, Ord, Enum, Num, Fractional, Floating, Real, RealFrac, RealFloat) latitudeType :: Double -- ^ The value which will be between -90 and 90 (values out of the range are truncated using a modulus operation). -> LatitudeType
Data/Geo/GPX/LongitudeType.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses, GeneralizedNewtypeDeriving #-} -- | Simple Type: @latitudeType@ <http://www.topografix.com/GPX/1/1/#type_latitudeType> module Data.Geo.GPX.LongitudeType(@@ -11,7 +11,7 @@ import Text.XML.HXT.Arrow newtype LongitudeType = LongitudeType Double- deriving Eq+ deriving (Eq, Ord, Enum, Num, Fractional, Floating, Real, RealFrac, RealFloat) longitudeType :: Double -- ^ The value which will be between -180 and 180 (values out of the range are truncated using a modulus operation). -> LongitudeType
Data/Geo/GPX/WptType.hs view
@@ -32,6 +32,8 @@ import Data.Geo.GPX.Accessor.Ageofdgpsdata import Data.Geo.GPX.Accessor.Dgpsid import Data.Geo.GPX.Accessor.Extensions+import Data.Geo.GPX.Accessor.Latlon+import Data.Geo.GPX.Accessor.Value import Text.XML.HXT.Arrow import Text.XML.HXT.Extras @@ -169,3 +171,6 @@ instance Extensions WptType where extensions (WptType _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x) = x++instance Latlon WptType where+ latlon e = (value (lat e), value (lon e))
GPX.cabal view
@@ -1,5 +1,5 @@ Name: GPX-Version: 0.1+Version: 0.2 License: BSD3 License-File: LICENSE Synopsis: Parse GPX files@@ -92,3 +92,4 @@ Data.Geo.GPX.Accessor.Rtepts Data.Geo.GPX.Accessor.Trkpts Data.Geo.GPX.Accessor.Trksegs+ Data.Geo.GPX.Accessor.Latlon