coordinate-0.0.21: A representation of latitude and longitude

Safe HaskellNone
LanguageHaskell2010

Data.Geo.Coordinate.DegreesLatitude

Synopsis

Documentation

data DegreesLatitude Source

Instances

Eq DegreesLatitude Source 
Ord DegreesLatitude Source 
Show DegreesLatitude Source 
AsDegreesLatitude p f DegreesLatitude Source 
(Choice p, Applicative f) => AsCoordinate p f ((DegreesLatitude, Minutes, Seconds), Double) Source 
(Profunctor p, Functor f) => AsCoordinate p f ((DegreesLongitude, Minutes, Seconds), (DegreesLatitude, Minutes, Seconds)) Source 
(Profunctor p, Functor f) => AsCoordinate p f ((DegreesLatitude, Minutes, Seconds), (DegreesLongitude, Minutes, Seconds)) Source 
(Profunctor p, Functor f) => AsCoordinate p f (Longitude, (DegreesLatitude, Minutes, Seconds)) Source 
(Profunctor p, Functor f) => AsCoordinate p f ((DegreesLatitude, Minutes, Seconds), Longitude) Source 
(Profunctor p, Functor f) => AsLatitude p f (DegreesLatitude, Minutes, Seconds) Source

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

>>> do deg <- (7 :: Int) ^? _DegreesLatitude; min <- (7 :: Int) ^? _Minutes; sec <- (7 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe Latitude
Just (Latitude (DegreesLatitude 7) (Minutes 7) (Seconds 7.0000))
>>> do deg <- (89 :: Int) ^? _DegreesLatitude; min <- (59 :: Int) ^? _Minutes; sec <- (59 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe Latitude
Just (Latitude (DegreesLatitude 89) (Minutes 59) (Seconds 59.0000))
>>> do deg <- (-7 :: Int) ^? _DegreesLatitude; min <- (7 :: Int) ^? _Minutes; sec <- (7 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe Latitude
Just (Latitude (DegreesLatitude (-7)) (Minutes 7) (Seconds 7.0000))
>>> do deg <- (-89 :: Int) ^? _DegreesLatitude; min <- (59 :: Int) ^? _Minutes; sec <- (59 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe Latitude
Just (Latitude (DegreesLatitude (-89)) (Minutes 59) (Seconds 59.0000))
>>> do deg <- (90 :: Int) ^? _DegreesLatitude; min <- (59 :: Int) ^? _Minutes; sec <- (59 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe Latitude
Nothing
>>> do deg <- (89 :: Int) ^? _DegreesLatitude; min <- (60 :: Int) ^? _Minutes; sec <- (59 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe Latitude
Nothing
>>> do deg <- (89 :: Int) ^? _DegreesLatitude; min <- (59 :: Int) ^? _Minutes; sec <- (60 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe Latitude
Nothing
>>> fmap (\x -> _Latitude # x :: (DegreesLatitude, Minutes, Seconds))  ((7 :: Double) ^? _Latitude :: Maybe Latitude)
Just (DegreesLatitude 7,Minutes 0,Seconds 0.0000)
>>> fmap (\x -> _Latitude # x :: (DegreesLatitude, Minutes, Seconds))  ((7.12 :: Double) ^? _Latitude :: Maybe Latitude)
Just (DegreesLatitude 7,Minutes 7,Seconds 12.0000)

class AsDegreesLatitude p f s where Source

Minimal complete definition

Nothing

Instances

(Choice p, Applicative f) => AsDegreesLatitude p f Int Source

A prism on degrees latitude to an integer between -90 and 90 exclusive.

>>> (7 :: Int) ^? _DegreesLatitude
Just (DegreesLatitude 7)
>>> (0 :: Int) ^? _DegreesLatitude
Just (DegreesLatitude 0)
>>> (89 :: Int) ^? _DegreesLatitude
Just (DegreesLatitude 89)
>>> (90 :: Int) ^? _DegreesLatitude
Nothing
>>> (-89 :: Int) ^? _DegreesLatitude
Just (DegreesLatitude (-89))
>>> (-90 :: Int) ^? _DegreesLatitude
Nothing
all (\m -> _DegreesLatitude # m == (n :: Int)) (n ^? _DegreesLatitude)
AsDegreesLatitude p f DegreesLatitude Source 
((~) (* -> * -> *) p (->), Functor f) => AsDegreesLatitude p f Latitude Source 
((~) (* -> * -> *) p (->), Functor f) => AsDegreesLatitude p f Coordinate Source 

modDegreesLatitude :: Int -> DegreesLatitude Source

Setting a value within the range -90 and 90 using modulo arithmetic.

>>> modDegreesLatitude 7
DegreesLatitude 7
>>> modDegreesLatitude 0
DegreesLatitude 0
>>> modDegreesLatitude 90
DegreesLatitude 90
>>> modDegreesLatitude (-90)
DegreesLatitude (-90)
>>> modDegreesLatitude 1
DegreesLatitude 1
>>> modDegreesLatitude 89
DegreesLatitude 89 
>>> modDegreesLatitude 91
DegreesLatitude (-89)
>>> modDegreesLatitude (-91)
DegreesLatitude 89
>>> modDegreesLatitude 300
DegreesLatitude (-60)
>>> modDegreesLatitude (-300)
DegreesLatitude 60

antipodeDegreesLatitude :: Iso' DegreesLatitude DegreesLatitude Source

The degrees latitude that is symmetrical around the equator.

>>> antipodeDegreesLatitude # modDegreesLatitude 30
DegreesLatitude (-30)
>>> antipodeDegreesLatitude # modDegreesLatitude 80
DegreesLatitude (-80)
>>> antipodeDegreesLatitude # modDegreesLatitude 110
DegreesLatitude 70
>>> antipodeDegreesLatitude # modDegreesLatitude 0
DegreesLatitude 0