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