d      Safe-Inferred246.Setting a value `>= 60` will get that value `(mod 60)`. modSeconds 7Seconds 7.0000 modSeconds 0Seconds 0.0000modSeconds (-0.0001)Seconds 59.9999 modSeconds 60Seconds 0.0000modSeconds 59.99999Seconds 60.0000modSeconds 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-Inferred246.Setting a value `>= 60` will get that value `(mod 60)`. modMinutes 7 Minutes 7 modMinutes 0 Minutes 0 modMinutes 60 Minutes 0 modMinutes 1 Minutes 1 modMinutes 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 `>= 90` will get that value `(mod 180)`.modDegreesLongitude 7DegreesLongitude 7modDegreesLongitude 0DegreesLongitude 0modDegreesLongitude 180DegreesLongitude 0modDegreesLongitude 1DegreesLongitude 1modDegreesLongitude 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) # "$    # "$ Safe-Inferred!"246%@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.118611111111111fmap (\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 LongitudeNothingdo deg <- (179 :: Int) ^? _DegreesLongitude; min <- (60 :: Int) ^? _Minutes; sec <- (59 :: Double) ^? _Seconds; (deg, min, sec) ^? _Longitude :: Maybe LongitudeNothingdo 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-Inferred246.Setting a value `>= 90` will get that value `(mod 90)`.modDegreesLatitude 7DegreesLatitude 7modDegreesLatitude 0DegreesLatitude 0modDegreesLatitude 90DegreesLatitude 0modDegreesLatitude 1DegreesLatitude 1modDegreesLatitude 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)-,.-,. Safe-Inferred!"246/=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.118611111111111fmap (\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.251666666666670QAn 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 LatitudeNothingdo deg <- (89 :: Int) ^? _DegreesLatitude; min <- (60 :: Int) ^? _Minutes; sec <- (59 :: Double) ^? _Seconds; (deg, min, sec) ^? _Latitude :: Maybe LatitudeNothingdo 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) 1234/051234/05 Safe-Inferred !"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.6789:;<=>?@ABCDEFGHIJ6789:;<=>?@ABCDEFGHIJ Safe-Inferred K      !"#$% &'()*+,-./012345678!9:;<=>?@ABCDEFGHIJKLMcoordinate-0.0.14Data.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 modSeconds AsMinutes_MinutesMinutes modMinutesAsDegreesLongitude_DegreesLongitudeDegreesLongitudemodDegreesLongitude AsLongitude _Longitude LongitudeAsDegreesLatitude_DegreesLatitudeDegreesLatitudemodDegreesLatitude AsLatitude _LatitudeLatitude AsCoordinate _Coordinate Coordinate.#.<°>$fAsSecondspfDouble $fShowSeconds$fAsSecondspfSeconds$fAsMinutespfInt$fAsMinutespfMinutes$fAsDegreesLongitudepfInt&$fAsDegreesLongitudepfDegreesLongitude$fAsLongitudepfDouble$fAsLongitudepf(,,)$fAsSecondspfLongitude$fAsMinutespfLongitude$fAsDegreesLongitudepfLongitude$fAsLongitudepfLongitude$fAsDegreesLatitudepfInt$$fAsDegreesLatitudepfDegreesLatitude$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