coordinate-0.0.21: A representation of latitude and longitude

Safe HaskellNone
LanguageHaskell2010

Data.Geo.Coordinate.Longitude

Synopsis

Documentation

class AsLongitude p f s where Source

Minimal complete definition

Nothing

Instances

(Choice p, Applicative f) => AsLongitude p f Double Source

A prism on longitude to a double between -180 and 180 exclusive.

>>> (7 :: Double) ^? _Longitude :: Maybe Longitude
Just (Longitude (DegreesLongitude 7) (Minutes 0) (Seconds 0.0000))
>>> (-7 :: Double) ^? _Longitude :: Maybe Longitude
Just (Longitude (DegreesLongitude (-7)) (Minutes 0) (Seconds 0.0000))
>>> (7.12 :: Double) ^? _Longitude :: Maybe Longitude
Just (Longitude (DegreesLongitude 7) (Minutes 7) (Seconds 12.0000))
>>> (-7.12 :: Double) ^? _Longitude :: Maybe Longitude
Just (Longitude (DegreesLongitude (-7)) (Minutes 7) (Seconds 12.0000))
>>> fmap (\x -> _Longitude # x  :: Double) ((7.12 :: Double) ^? _Longitude :: Maybe Longitude)
Just 7.12
>>> fmap (\x -> _Longitude # x :: Double) ((-7.12 :: Double) ^? _Longitude :: Maybe Longitude)
Just (-7.12)
>>> (180 :: Double) ^? _Longitude :: Maybe Longitude
Nothing
>>> (-180 :: Double) ^? _Longitude :: Maybe Longitude
Nothing
>>> (15.63791 :: Double) ^? _Longitude :: Maybe Longitude
Just (Longitude (DegreesLongitude 15) (Minutes 38) (Seconds 16.4760))
>>> (179.1 :: Double) ^? _Longitude :: Maybe Longitude
Just (Longitude (DegreesLongitude 179) (Minutes 5) (Seconds 60.0000))
>>> (179.2 :: Double) ^? _Longitude :: Maybe Longitude
Just (Longitude (DegreesLongitude 179) (Minutes 11) (Seconds 60.0000))
>>> fmap (\x -> _Longitude # x :: Double) (do deg <- (7 :: Int) ^? _DegreesLongitude; min <- (7 :: Int) ^? _Minutes; sec <- (7 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe Longitude)
Just 7.118611111111111
>>> fmap (\x -> _Longitude # x :: Double) (do deg <- (179 :: Int) ^? _DegreesLongitude; min <- (15 :: Int) ^? _Minutes; sec <- (6 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe Longitude)
Just 179.25166666666667
AsLongitude p f Longitude Source 
((~) (* -> * -> *) p (->), Functor f) => AsLongitude p f Coordinate Source 
(Profunctor p, Functor f) => AsLongitude p f (DegreesLongitude, Minutes, Seconds) Source

An isomorphism on the triple of degrees longitude, minutes, seconds to a longitude.

>>> do deg <- (7 :: Int) ^? _DegreesLongitude; min <- (7 :: Int) ^? _Minutes; sec <- (7 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe Longitude
Just (Longitude (DegreesLongitude 7) (Minutes 7) (Seconds 7.0000))
>>> do deg <- (179 :: Int) ^? _DegreesLongitude; min <- (59 :: Int) ^? _Minutes; sec <- (59 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe Longitude
Just (Longitude (DegreesLongitude 179) (Minutes 59) (Seconds 59.0000))
>>> do deg <- (-7 :: Int) ^? _DegreesLongitude; min <- (7 :: Int) ^? _Minutes; sec <- (7 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe Longitude
Just (Longitude (DegreesLongitude (-7)) (Minutes 7) (Seconds 7.0000))
>>> do deg <- (-179 :: Int) ^? _DegreesLongitude; min <- (59 :: Int) ^? _Minutes; sec <- (59 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe Longitude
Just (Longitude (DegreesLongitude (-179)) (Minutes 59) (Seconds 59.0000))
>>> do deg <- (180 :: Int) ^? _DegreesLongitude; min <- (59 :: Int) ^? _Minutes; sec <- (59 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe Longitude
Nothing
>>> do deg <- (179 :: Int) ^? _DegreesLongitude; min <- (60 :: Int) ^? _Minutes; sec <- (59 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe Longitude
Nothing
>>> do deg <- (179 :: Int) ^? _DegreesLongitude; min <- (59 :: Int) ^? _Minutes; sec <- (60 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe Longitude
Nothing
>>> fmap (\x -> _Longitude # x :: (DegreesLongitude, Minutes, Seconds))  ((7 :: Double) ^? _Longitude :: Maybe Longitude)
Just (DegreesLongitude 7,Minutes 0,Seconds 0.0000)
>>> fmap (\x -> _Longitude # x :: (DegreesLongitude, Minutes, Seconds))  ((7.12 :: Double) ^? _Longitude :: Maybe Longitude)
Just (DegreesLongitude 7,Minutes 7,Seconds 12.0000)

modLongitude :: Int -> Int -> Double -> Longitude Source

Setting a longitude using modulo arithmetic.

>>> modLongitude 20 20 20
Longitude (DegreesLongitude 20) (Minutes 20) (Seconds 20.0000)
>>> modLongitude 20 20 (-20)
Longitude (DegreesLongitude 20) (Minutes 19) (Seconds 40.0000)
>>> modLongitude 20 20 80
Longitude (DegreesLongitude 20) (Minutes 21) (Seconds 20.0000)
>>> modLongitude 20 80 20
Longitude (DegreesLongitude 21) (Minutes 20) (Seconds 20.0000)
>>> modLongitude 20 80 80
Longitude (DegreesLongitude 21) (Minutes 21) (Seconds 20.0000)
>>> modLongitude 20 80 (-20)
Longitude (DegreesLongitude 21) (Minutes 19) (Seconds 40.0000)
>>> modLongitude 200 20 20
Longitude (DegreesLongitude (-160)) (Minutes 20) (Seconds 20.0000)
>>> modLongitude 200 20 80
Longitude (DegreesLongitude (-160)) (Minutes 21) (Seconds 20.0000)
>>> modLongitude 200 80 20
Longitude (DegreesLongitude (-159)) (Minutes 20) (Seconds 20.0000)
>>> modLongitude 200 20 (-20)
Longitude (DegreesLongitude (-160)) (Minutes 19) (Seconds 40.0000)
>>> modLongitude 200 (-20) (-20)
Longitude (DegreesLongitude (-161)) (Minutes 39) (Seconds 40.0000)
>>> modLongitude 200 (-80) (-20)
Longitude (DegreesLongitude (-162)) (Minutes 39) (Seconds 40.0000)
>>> modLongitude 20 20 3620
Longitude (DegreesLongitude 21) (Minutes 20) (Seconds 20.0000)
>>> modLongitude 20 20 (-3580)
Longitude (DegreesLongitude 19) (Minutes 20) (Seconds 20.0000)
>>> modLongitude 200 20 3620
Longitude (DegreesLongitude (-159)) (Minutes 20) (Seconds 20.0000)
>>> modLongitude 200 20 (-3580)
Longitude (DegreesLongitude (-161)) (Minutes 20) (Seconds 20.0000)

antipodeLongitude :: Iso' Longitude Longitude Source

The longitude that is symmetrical around the prime meridian.

>>> fmap (\x -> antipodeLongitude # x) (do d <- (7 :: Int) ^? _DegreesLongitude; m <- (7 :: Int) ^? _Minutes; s <- (7 :: Double) ^? _Seconds; (d, m, s) ^? _Longitude :: Maybe Longitude)
Just (Longitude (DegreesLongitude (-7)) (Minutes 7) (Seconds 7.0000))