coordinate-0.0.1: src/Data/GPS/Coordinate/Coordinate.hs
module Data.GPS.Coordinate.Coordinate(
Coordinate
, coordinate
, coordinate'
, coordinateLat
, coordinateLon
, coordinateLatlon
) where
import Prelude(Eq, Show, (.))
import Control.Lens(Iso', iso, mapping, swapped, withIso)
import Data.GPS.Coordinate.Latitude
import Data.GPS.Coordinate.Longitude
import Data.GPS.Coordinate.DegreesLatitude
import Data.GPS.Coordinate.DegreesLongitude
import Data.GPS.Coordinate.Minutes
import Data.GPS.Coordinate.Seconds
data Coordinate =
Coordinate
Latitude
Longitude
deriving (Eq, Show)
coordinate ::
Iso' (Latitude, Longitude) Coordinate
coordinate =
iso (\(lat, lon) -> Coordinate lat lon) (\(Coordinate lat lon) -> (lat, lon))
coordinate' ::
Iso' (Longitude, Latitude) Coordinate
coordinate' =
swapped . coordinate
coordinateLat ::
Iso' ((DegreesLatitude, Minutes, Seconds), Longitude) Coordinate
coordinateLat =
swapped . mapping latitude . coordinate'
coordinateLon ::
Iso' (Latitude, (DegreesLongitude, Minutes, Seconds)) Coordinate
coordinateLon =
mapping longitude . coordinate
coordinateLatlon ::
Iso' ((DegreesLatitude, Minutes, Seconds), (DegreesLongitude, Minutes, Seconds)) Coordinate
coordinateLatlon =
iso (\((td, tm, ts), (nd, nm, ns)) -> Coordinate (withIso latitude (\k _ -> k (td, tm, ts))) (withIso longitude (\k _ -> k (nd, nm, ns))))
(\(Coordinate lat lon) -> (withIso latitude (\_ k -> k lat), withIso longitude (\_ k -> k lon)))