-- | Reversing element lists of a GPX files. module Data.Geo.GPX.Util.Reverse( reverseRtes, reverseTrks, reverseTrksegs, reverseWpts, reverseConservingTime ) where import Data.Geo.GPX.Accessor.Trks import Data.Geo.GPX.Accessor.Trkpts import Data.Geo.GPX.Accessor.Trksegs import Data.Geo.GPX.Accessor.Wpts import Data.Geo.GPX.Accessor.Rtes import Data.Geo.GPX.Accessor.Rtepts import Data.Geo.GPX.Accessor.Time import Control.Applicative -- | Reverses a list of routes (rte). reverseRtes :: (Rtes a) => a -> a reverseRtes = usingRtes (map (usingRtepts reverse) . reverse) -- | Reverses a list of tracks (trk). reverseTrks :: (Trks a) => a -> a reverseTrks = usingTrks (map reverseTrksegs . reverse) -- | Reverses a list of track segments (trkseg). reverseTrksegs :: (Trksegs a) => a -> a reverseTrksegs = usingTrksegs (map (usingTrkpts reverse) . reverse) -- | Reverses a list of waypoints (wpt). reverseWpts :: (Wpts a) => a -> a reverseWpts = usingWpts reverse -- | Reverses a list of elements with a time, however, the time is not reversed. reverseConservingTime :: (Time a) => [a] -> [a] reverseConservingTime = zipWith setTime . map time <*> reverse