module Data.Geo.GPX.Bounds(
Bounds
, bounds
) where
import Data.Geo.GPX.Latitude
import Data.Geo.GPX.Longitude
import Data.Geo.GPX.Lens.MinlatL
import Data.Geo.GPX.Lens.MaxlatL
import Data.Geo.GPX.Lens.MinlonL
import Data.Geo.GPX.Lens.MaxlonL
import Data.Lens.Common
import Control.Comonad.Trans.Store
import Text.XML.HXT.Arrow.Pickle
data Bounds = Bounds (Latitude, Longitude) (Latitude, Longitude)
deriving (Eq, Ord)
bounds ::
(Latitude, Longitude)
-> (Latitude, Longitude)
-> Bounds
bounds =
Bounds
instance MinlatL Bounds where
minlatL =
Lens $ \(Bounds (minlat, minlon) (maxlat, maxlon)) -> store (\minlat -> Bounds (minlat, minlon) (maxlat, maxlon)) minlat
instance MinlonL Bounds where
minlonL =
Lens $ \(Bounds (minlat, minlon) (maxlat, maxlon)) -> store (\minlon -> Bounds (minlat, minlon) (maxlat, maxlon)) minlon
instance MaxlatL Bounds where
maxlatL =
Lens $ \(Bounds (minlat, minlon) (maxlat, maxlon)) -> store (\maxlat -> Bounds (minlat, minlon) (maxlat, maxlon)) maxlat
instance MaxlonL Bounds where
maxlonL =
Lens $ \(Bounds (minlat, minlon) (maxlat, maxlon)) -> store (\maxlon -> Bounds (minlat, minlon) (maxlat, maxlon)) maxlon
instance XmlPickler Bounds where
xpickle =
xpWrap (\(minlat', minlon', maxlat', maxlon') -> bounds (minlat', minlon') (maxlat', maxlon'),
\(Bounds (minlat', minlon') (maxlat', maxlon')) -> (minlat', minlon', maxlat', maxlon')) (xp4Tuple
(xpAttr "minlat" xpickle)
(xpAttr "minlon" xpickle)
(xpAttr "maxlat" xpickle)
(xpAttr "maxlon" xpickle))