coordinate-0.0.15: A representation of latitude and longitude

Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Geo.Coordinate.Seconds

Synopsis

Documentation

data Seconds Source

Instances

Eq Seconds 
Ord Seconds 
Show Seconds

A show instance that prints to 4 decimal places. This is to take floating-point rounding errors into account.

AsSeconds p f Seconds 
(Choice p, Applicative f) => AsCoordinate p f (Double, (DegreesLongitude, Minutes, Seconds)) 
(Choice p, Applicative f) => AsCoordinate p f ((DegreesLatitude, Minutes, Seconds), Double) 
(Profunctor p, Functor f) => AsCoordinate p f ((DegreesLongitude, Minutes, Seconds), (DegreesLatitude, Minutes, Seconds)) 
(Profunctor p, Functor f) => AsCoordinate p f ((DegreesLatitude, Minutes, Seconds), (DegreesLongitude, Minutes, Seconds)) 
(Profunctor p, Functor f) => AsCoordinate p f ((DegreesLongitude, Minutes, Seconds), Latitude) 
(Profunctor p, Functor f) => AsCoordinate p f (Latitude, (DegreesLongitude, Minutes, Seconds)) 
(Profunctor p, Functor f) => AsCoordinate p f (Longitude, (DegreesLatitude, Minutes, Seconds)) 
(Profunctor p, Functor f) => AsCoordinate p f ((DegreesLatitude, Minutes, Seconds), Longitude) 
(Profunctor p, Functor f) => AsLongitude p f (DegreesLongitude, Minutes, Seconds)

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)
(Profunctor p, Functor f) => AsLatitude p f (DegreesLatitude, Minutes, Seconds)

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 AsSeconds p f s where Source

Minimal complete definition

Nothing

Methods

_Seconds :: Optic' p f s Seconds Source

Instances

(Choice p, Applicative f) => AsSeconds p f Double

A prism on seconds to a double between 0 inclusive and 60 exclusive.

>>> (7 :: Double) ^? _Seconds
Just (Seconds 7.0000)
>>> (0 :: Double) ^? _Seconds
Just (Seconds 0.0000)
>>> (59 :: Double) ^? _Seconds
Just (Seconds 59.0000)
>>> (59.99 :: Double) ^? _Seconds
Just (Seconds 59.9900)
>>> (60 :: Double) ^? _Seconds
Nothing
all (\m -> _Seconds # m == (n :: Double)) (n ^? _Seconds)
AsSeconds p f Seconds 
((~) (* -> * -> *) p (->), Functor f) => AsSeconds p f Longitude 
((~) (* -> * -> *) p (->), Functor f) => AsSeconds p f Latitude 

remSeconds :: Double -> Seconds Source

Setting a value `>= 60` will get that value `(rem 60)`.

>>> remSeconds 7
Seconds 7.0000
>>> remSeconds 0
Seconds 0.0000
>>> remSeconds (-0.0001)
Seconds 59.9999
>>> remSeconds 60
Seconds 0.0000
>>> remSeconds 59.99999
Seconds 60.0000
>>> remSeconds 59.999
Seconds 59.9990