úÎÄãÀå      Safe-Inferred246Setting a value >= 60 will get that value (rem 60). remSeconds 7Seconds 7.0000 remSeconds 0Seconds 0.0000remSeconds (-0.0001)Seconds 59.9999 remSeconds 60Seconds 0.0000remSeconds 59.99999Seconds 60.0000remSeconds 59.999Seconds 59.9990DA prism on seconds to a double between 0 inclusive and 60 exclusive.(7 :: Double) ^? _SecondsJust (Seconds 7.0000)(0 :: Double) ^? _SecondsJust (Seconds 0.0000)(59 :: Double) ^? _SecondsJust (Seconds 59.0000)(59.99 :: Double) ^? _SecondsJust (Seconds 59.9900)(60 :: Double) ^? _SecondsNothing9all (\m -> _Seconds # m == (n :: Double)) (n ^? _Seconds)nA show instance that prints to 4 decimal places. This is to take floating-point rounding errors into account. Safe-Inferred246Setting a value >= 60 will get that value ( 60). remMinutes 7 Minutes 7 remMinutes 0 Minutes 0 remMinutes 60 Minutes 0 remMinutes 1 Minutes 1 remMinutes 59 Minutes 59 <A prism on minutes to an integer between 0 and 59 inclusive.(7 :: Int) ^? _MinutesJust (Minutes 7)(0 :: Int) ^? _MinutesJust (Minutes 0)(59 :: Int) ^? _MinutesJust (Minutes 59)(60 :: Int) ^? _MinutesNothing6all (\m -> _Minutes # m == (n :: Int)) (n ^? _Minutes)! "! " Safe-Inferred246 Setting a value >= 180 will get that value ( 180).remDegreesLongitude 7DegreesLongitude 7remDegreesLongitude 0DegreesLongitude 0remDegreesLongitude 180DegreesLongitude 0remDegreesLongitude 1DegreesLongitude 1remDegreesLongitude 179DegreesLongitude 179 #JA prism on degrees longitude to an integer between -180 and 180 exclusive.(7 :: Int) ^? _DegreesLongitudeJust (DegreesLongitude 7)(0 :: Int) ^? _DegreesLongitudeJust (DegreesLongitude 0)!(179 :: Int) ^? _DegreesLongitudeJust (DegreesLongitude 179)!(180 :: Int) ^? _DegreesLongitudeNothing"(-179 :: Int) ^? _DegreesLongitudeJust (DegreesLongitude (-179))"(-180 :: Int) ^? _DegreesLongitudeNothingHall (\m -> _DegreesLongitude # m == (n :: Int)) (n ^? _DegreesLongitude) $ #%    $ #%None!"246&<A prism on longitude to a double between -À and À exclusive.$(0.2 :: Radian Double) ^? _LongitudeEJust (Longitude (DegreesLongitude 11) (Minutes 27) (Seconds 32.9612))$(1.3 :: Radian Double) ^? _LongitudeDJust (Longitude (DegreesLongitude 74) (Minutes 29) (Seconds 4.2481))%(-1.3 :: Radian Double) ^? _LongitudeGJust (Longitude (DegreesLongitude (-74)) (Minutes 29) (Seconds 4.2481))((3.14159 :: Radian Double) ^? _LongitudeFJust (Longitude (DegreesLongitude 179) (Minutes 59) (Seconds 59.4527))%(3.15 :: Radian Double) ^? _LongitudeNothing&(-3.15 :: Radian Double) ^? _LongitudeNothingËfmap (\x -> _Longitude # x :: Radian Double) (do deg <- (7 :: Int) ^? _DegreesLongitude; min <- (7 :: Int) ^? _Minutes; sec <- (7 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe Longitude)!Just (Radian 0.12424320205794079)Îfmap (\x -> _Longitude # x :: Radian Double) (do deg <- (179 :: Int) ^? _DegreesLongitude; min <- (15 :: Int) ^? _Minutes; sec <- (6 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe Longitude) Just (Radian 3.1285317730207023)'@A prism on longitude to a double between -180 and 180 exclusive..(7 :: Double) ^? _Longitude :: Maybe LongitudeBJust (Longitude (DegreesLongitude 7) (Minutes 0) (Seconds 0.0000))/(-7 :: Double) ^? _Longitude :: Maybe LongitudeEJust (Longitude (DegreesLongitude (-7)) (Minutes 0) (Seconds 0.0000))1(7.12 :: Double) ^? _Longitude :: Maybe LongitudeCJust (Longitude (DegreesLongitude 7) (Minutes 7) (Seconds 12.0000))2(-7.12 :: Double) ^? _Longitude :: Maybe LongitudeFJust (Longitude (DegreesLongitude (-7)) (Minutes 7) (Seconds 12.0000))Zfmap (\x -> _Longitude # x :: Double) ((7.12 :: Double) ^? _Longitude :: Maybe Longitude) Just 7.12Zfmap (\x -> _Longitude # x :: Double) ((-7.12 :: Double) ^? _Longitude :: Maybe Longitude) Just (-7.12)0(180 :: Double) ^? _Longitude :: Maybe LongitudeNothing1(-180 :: Double) ^? _Longitude :: Maybe LongitudeNothing5(15.63791 :: Double) ^? _Longitude :: Maybe LongitudeEJust (Longitude (DegreesLongitude 15) (Minutes 38) (Seconds 16.4760))2(179.1 :: Double) ^? _Longitude :: Maybe LongitudeEJust (Longitude (DegreesLongitude 179) (Minutes 5) (Seconds 60.0000))2(179.2 :: Double) ^? _Longitude :: Maybe LongitudeFJust (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(SAn 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 LongitudeBJust (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 LongitudeFJust (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 LongitudeEJust (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 LongitudeIJust (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 LongitudeNothing do deg <- (179 :: Int) ^? _DegreesLongitude; min <- (60 :: Int) ^? _Minutes; sec <- (59 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe LongitudeNothing do deg <- (179 :: Int) ^? _DegreesLongitude; min <- (59 :: Int) ^? _Minutes; sec <- (60 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe LongitudeNothingufmap (\x -> _Longitude # x :: (DegreesLongitude, Minutes, Seconds)) ((7 :: Double) ^? _Longitude :: Maybe Longitude)2Just (DegreesLongitude 7,Minutes 0,Seconds 0.0000)xfmap (\x -> _Longitude # x :: (DegreesLongitude, Minutes, Seconds)) ((7.12 :: Double) ^? _Longitude :: Maybe Longitude)3Just (DegreesLongitude 7,Minutes 7,Seconds 12.0000) )*+,&'(-   )*+,&'(- Safe-Inferred246Setting a value >= 90 will get that value ( 90).remDegreesLatitude 7DegreesLatitude 7remDegreesLatitude 0DegreesLatitude 0remDegreesLatitude 90DegreesLatitude 0remDegreesLatitude 1DegreesLatitude 1remDegreesLatitude 89DegreesLatitude 89 .GA prism on degrees latitude to an integer between -90 and 90 exclusive.(7 :: Int) ^? _DegreesLatitudeJust (DegreesLatitude 7)(0 :: Int) ^? _DegreesLatitudeJust (DegreesLatitude 0)(89 :: Int) ^? _DegreesLatitudeJust (DegreesLatitude 89)(90 :: Int) ^? _DegreesLatitudeNothing (-89 :: Int) ^? _DegreesLatitudeJust (DegreesLatitude (-89)) (-90 :: Int) ^? _DegreesLatitudeNothingFall (\m -> _DegreesLatitude # m == (n :: Int)) (n ^? _DegreesLatitude)/.0/.0None!"2461>A prism on latitude to a double between -À2 and À2 exclusive. #(0.2 :: Radian Double) ^? _LatitudeCJust (Latitude (DegreesLatitude 11) (Minutes 27) (Seconds 32.9612))#(1.3 :: Radian Double) ^? _LatitudeBJust (Latitude (DegreesLatitude 74) (Minutes 29) (Seconds 4.2481))$(-1.3 :: Radian Double) ^? _LatitudeEJust (Latitude (DegreesLatitude (-74)) (Minutes 29) (Seconds 4.2481)))(1.5707963 :: Radian Double) ^? _LatitudeCJust (Latitude (DegreesLatitude 89) (Minutes 59) (Seconds 59.9945))$(1.58 :: Radian Double) ^? _LatitudeNothing%(-1.58 :: Radian Double) ^? _LatitudeNothingÈfmap (\x -> _Latitude # x :: Radian Double) (do deg <- (7 :: Int) ^? _DegreesLatitude; min <- (7 :: Int) ^? _Minutes; sec <- (7 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe Latitude)!Just (Radian 0.12424320205794079)Êfmap (\x -> _Latitude # x :: Radian Double) (do deg <- (89 :: Int) ^? _DegreesLatitude; min <- (15 :: Int) ^? _Minutes; sec <- (6 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe Latitude) Just (Radian 1.5577354462258055)2=A prism on latitude to a double between -90 and 90 exclusive.,(7 :: Double) ^? _Latitude :: Maybe Latitude@Just (Latitude (DegreesLatitude 7) (Minutes 0) (Seconds 0.0000))-(-7 :: Double) ^? _Latitude :: Maybe LatitudeCJust (Latitude (DegreesLatitude (-7)) (Minutes 0) (Seconds 0.0000))/(7.12 :: Double) ^? _Latitude :: Maybe LatitudeAJust (Latitude (DegreesLatitude 7) (Minutes 7) (Seconds 12.0000))0(-7.12 :: Double) ^? _Latitude :: Maybe LatitudeDJust (Latitude (DegreesLatitude (-7)) (Minutes 7) (Seconds 12.0000))Vfmap (\x -> _Latitude # x :: Double) ((7.12 :: Double) ^? _Latitude :: Maybe Latitude) Just 7.12Wfmap (\x -> _Latitude # x :: Double) ((-7.12 :: Double) ^? _Latitude :: Maybe Latitude) Just (-7.12)-(90 :: Double) ^? _Latitude :: Maybe LatitudeNothing.(-90 :: Double) ^? _Latitude :: Maybe LatitudeNothing3(15.63791 :: Double) ^? _Latitude :: Maybe LatitudeCJust (Latitude (DegreesLatitude 15) (Minutes 38) (Seconds 16.4760))/(89.1 :: Double) ^? _Latitude :: Maybe LatitudeBJust (Latitude (DegreesLatitude 89) (Minutes 5) (Seconds 60.0000))/(89.2 :: Double) ^? _Latitude :: Maybe LatitudeBJust (Latitude (DegreesLatitude 89) (Minutes 12) (Seconds 0.0000))Àfmap (\x -> _Latitude # x :: Double) (do deg <- (7 :: Int) ^? _DegreesLatitude; min <- (7 :: Int) ^? _Minutes; sec <- (7 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe Latitude)Just 7.118611111111111Ãfmap (\x -> _Latitude # x :: Double) (do deg <- (89 :: Int) ^? _DegreesLatitude; min <- (15 :: Int) ^? _Minutes; sec <- (6 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe Latitude)Just 89.251666666666673QAn 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 LatitudeCJust (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 LatitudeCJust (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 LatitudeFJust (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 LatitudeNothingœdo deg <- (89 :: Int) ^? _DegreesLatitude; min <- (60 :: Int) ^? _Minutes; sec <- (59 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe LatitudeNothingœdo deg <- (89 :: Int) ^? _DegreesLatitude; min <- (59 :: Int) ^? _Minutes; sec <- (60 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe LatitudeNothingqfmap (\x -> _Latitude # x :: (DegreesLatitude, Minutes, Seconds)) ((7 :: Double) ^? _Latitude :: Maybe Latitude)1Just (DegreesLatitude 7,Minutes 0,Seconds 0.0000)tfmap (\x -> _Latitude # x :: (DegreesLatitude, Minutes, Seconds)) ((7.12 :: Double) ^? _Latitude :: Maybe Latitude)2Just (DegreesLatitude 7,Minutes 7,Seconds 12.0000) 45671238 45671238None !"2346HM1Build a coordinate from a latitude and longitude.jBuild a coordinate from a fractional latitude and fractional longitude. Fails if either are out of range.9:;<=>?@ABCDEFGHIJKLM9:;<=>?@ABCDEFGHIJKLMNone N      !"#$% &'()*+,-./0123456789:;<=!>?@ABCDEFGHIJKLMNOPQRcoordinate-0.0.17Data.Geo.Coordinate.SecondsData.Geo.Coordinate.Minutes$Data.Geo.Coordinate.DegreesLongitudeData.Geo.Coordinate.Longitude#Data.Geo.Coordinate.DegreesLatitudeData.Geo.Coordinate.LatitudeData.Geo.Coordinate.CoordinateData.Geo.Coordinate AsSeconds_SecondsSeconds remSeconds AsMinutes_MinutesMinutes remMinutesAsDegreesLongitude_DegreesLongitudeDegreesLongituderemDegreesLongitude AsLongitude _Longitude LongitudeAsDegreesLatitude_DegreesLatitudeDegreesLatituderemDegreesLatitude AsLatitude _LatitudeLatitude AsCoordinate _Coordinate Coordinate.#.<°>$fAsSecondspfDouble $fShowSeconds$fAsSecondspfSecondsbaseGHC.Realrem$fAsMinutespfInt$fAsMinutespfMinutes$fAsDegreesLongitudepfInt&$fAsDegreesLongitudepfDegreesLongitude$fAsLongitudepfRadian$fAsLongitudepfDouble$fAsLongitudepf(,,)$fAsSecondspfLongitude$fAsMinutespfLongitude$fAsDegreesLongitudepfLongitude$fAsLongitudepfLongitude$fAsDegreesLatitudepfInt$$fAsDegreesLatitudepfDegreesLatitude$fAsLatitudepfRadian$fAsLatitudepfDouble$fAsLatitudepf(,,)$fAsSecondspfLatitude$fAsMinutespfLatitude$fAsDegreesLatitudepfLatitude$fAsLatitudepfLatitudecoordinatePrism'coordinatePrism $fAsDegreesLongitudepfCoordinate$fAsLongitudepfCoordinate$fAsDegreesLatitudepfCoordinate$fAsLatitudepfCoordinate$fAsCoordinatepf(,)$fAsCoordinatepf(,)0$fAsCoordinatepf(,)1$fAsCoordinatepf(,)2$fAsCoordinatepf(,)3$fAsCoordinatepf(,)4$fAsCoordinatepf(,)5$fAsCoordinatepf(,)6$fAsCoordinatepf(,)7$fAsCoordinatepf(,)8$fAsCoordinatepf(,)9$fAsCoordinatepf(,)10$fAsCoordinatepf(,)11$fAsCoordinatepfCoordinate