coordinate-0.0.1: src/Data/GPS/Coordinate/Longitude.hs
module Data.GPS.Coordinate.Longitude(
Longitude
, longitude
, longitudeF
) where
import Prelude(Double, Eq, Show, Ord(..), Num(..), Bool(..), Monad(..), (&&), properFraction, fromIntegral)
import Control.Lens(Iso', Prism', iso, prism', (#), (^?))
import Data.GPS.Coordinate.DegreesLongitude
import Data.GPS.Coordinate.Minutes
import Data.GPS.Coordinate.Seconds
data Longitude =
Longitude
DegreesLongitude
Minutes
Seconds
deriving (Eq, Show)
longitude ::
Iso' (DegreesLongitude, Minutes, Seconds) Longitude
longitude =
iso (\(d, m, s) -> Longitude d m s) (\(Longitude d m s) -> (d, m, s))
longitudeF ::
Prism' Double Longitude
longitudeF =
prism' (\(Longitude d m s) ->
fromIntegral (degreesLongitude # d) + seconds # s + fromIntegral (minutes # m * 60))
(\x -> let (d, z) = properFraction x
(m, s) = properFraction ((z :: Double) * 60)
in do d' <- d ^? degreesLongitude
m' <- m ^? minutes
s' <- s ^? seconds
return (Longitude d' m' s'))