úΞ÷›n+      !"#$%&'()* Safe-Inferred„Construct seconds such that if the given value is out of bounds, a modulus is taken to keep it within 0 inclusive and 60 exclusive. 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 ^? nSecondsJust (Seconds 7.0000) 0 ^? nSecondsJust (Seconds 0.0000)59 ^? nSecondsJust (Seconds 59.0000)59.99 ^? nSecondsJust (Seconds 59.9900)60 ^? nSecondsNothing-all (\m -> nSeconds # m == n) (n ^? nSeconds)+nA show instance that prints to 4 decimal places. This is to take floating-point rounding errors into account.,-+,-+ Safe-Inferred„Construct minutes such that if the given value is out of bounds, a modulus is taken to keep it within 0 inclusive and 59 inclusive. modMinutes 7 Minutes 7 modMinutes 0 Minutes 0 modMinutes 60 Minutes 0 modMinutes 61 Minutes 1 modMinutes 59 Minutes 59 <A prism on minutes to an integer between 0 and 59 inclusive. 7 ^? nMinutesJust (Minutes 7) 0 ^? nMinutesJust (Minutes 0)59 ^? nMinutesJust (Minutes 59)60 ^? nMinutesNothing-all (\m -> nMinutes # m == n) (n ^? nMinutes). /  . / Safe-Inferred JA prism on degrees longitude to an integer between -180 and 180 exclusive.7 ^? nDegreesLongitudeJust (DegreesLongitude 7)0 ^? nDegreesLongitudeJust (DegreesLongitude 0)179 ^? nDegreesLongitudeJust (DegreesLongitude 179)180 ^? nDegreesLongitudeNothing(-179) ^? nDegreesLongitudeJust (DegreesLongitude (-179))(-180) ^? nDegreesLongitudeNothing?all (\m -> nDegreesLongitude # m == n) (n ^? nDegreesLongitude) 0 1    0 1 Safe-InferredSAn isomorphism on the triple of degrees longitude, minutes, seconds to a longitude.mdo deg <- 7 ^? nDegreesLongitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLongitudeBJust (Longitude (DegreesLongitude 7) (Minutes 7) (Seconds 7.0000))qdo deg <- 179 ^? nDegreesLongitude; min <- 59 ^? nMinutes; sec <- 59 ^? nSeconds; (deg, min, sec) ^? dmsLongitudeFJust (Longitude (DegreesLongitude 179) (Minutes 59) (Seconds 59.0000))pdo deg <- (-7) ^? nDegreesLongitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLongitudeEJust (Longitude (DegreesLongitude (-7)) (Minutes 7) (Seconds 7.0000))tdo deg <- (-179) ^? nDegreesLongitude; min <- 59 ^? nMinutes; sec <- 59 ^? nSeconds; (deg, min, sec) ^? dmsLongitudeIJust (Longitude (DegreesLongitude (-179)) (Minutes 59) (Seconds 59.0000))qdo deg <- 180 ^? nDegreesLongitude; min <- 59 ^? nMinutes; sec <- 59 ^? nSeconds; (deg, min, sec) ^? dmsLongitudeNothingqdo deg <- 179 ^? nDegreesLongitude; min <- 60 ^? nMinutes; sec <- 59 ^? nSeconds; (deg, min, sec) ^? dmsLongitudeNothingqdo deg <- 179 ^? nDegreesLongitude; min <- 59 ^? nMinutes; sec <- 60 ^? nSeconds; (deg, min, sec) ^? dmsLongitudeNothing+fmap (dmsLongitude #) (7 ^? fracLongitude)2Just (DegreesLongitude 7,Minutes 0,Seconds 0.0000).fmap (dmsLongitude #) (7.12 ^? fracLongitude)3Just (DegreesLongitude 7,Minutes 7,Seconds 12.0000)@A prism on longitude to a double between -180 and 180 exclusive.7 ^? fracLongitudeBJust (Longitude (DegreesLongitude 7) (Minutes 0) (Seconds 0.0000))(-7) ^? fracLongitudeEJust (Longitude (DegreesLongitude (-7)) (Minutes 0) (Seconds 0.0000))7.12 ^? fracLongitudeCJust (Longitude (DegreesLongitude 7) (Minutes 7) (Seconds 12.0000))(-7.12) ^? fracLongitudeFJust (Longitude (DegreesLongitude (-7)) (Minutes 7) (Seconds 12.0000)).fmap (fracLongitude #) (7.12 ^? fracLongitude) Just 7.121fmap (fracLongitude #) ((-7.12) ^? fracLongitude) Just (-7.12)180 ^? fracLongitudeNothing(-180) ^? fracLongitudeNothing15.63791 ^? fracLongitudeEJust (Longitude (DegreesLongitude 15) (Minutes 38) (Seconds 16.4760))179.1 ^? fracLongitudeEJust (Longitude (DegreesLongitude 179) (Minutes 5) (Seconds 60.0000))179.2 ^? fracLongitudeFJust (Longitude (DegreesLongitude 179) (Minutes 11) (Seconds 60.0000))†fmap (fracLongitude #) (do deg <- 7 ^? nDegreesLongitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLongitude)Just 7.118611111111111‰fmap (fracLongitude #) (do deg <- 179 ^? nDegreesLongitude; min <- 15 ^? nMinutes; sec <- 6 ^? nSeconds; (deg, min, sec) ^? dmsLongitude)Just 179.25166666666667<A prism on longitude to a double between -À and À exclusive.0.2 ^? radianLongitudeEJust (Longitude (DegreesLongitude 11) (Minutes 27) (Seconds 32.9612))1.3 ^? radianLongitudeDJust (Longitude (DegreesLongitude 74) (Minutes 29) (Seconds 4.2481))(-1.3) ^? radianLongitudeGJust (Longitude (DegreesLongitude (-74)) (Minutes 29) (Seconds 4.2481))3.14159 ^? radianLongitudeFJust (Longitude (DegreesLongitude 179) (Minutes 59) (Seconds 59.4527))3.15 ^? radianLongitudeNothing(-3.15) ^? radianLongitudeNothingˆfmap (radianLongitude #) (do deg <- 7 ^? nDegreesLongitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLongitude)Just 0.12424320205794079‹fmap (radianLongitude #) (do deg <- 179 ^? nDegreesLongitude; min <- 15 ^? nMinutes; sec <- 6 ^? nSeconds; (deg, min, sec) ^? dmsLongitude)Just 3.1285317730207023 23456 23456 Safe-InferredGA prism on degrees latitude to an integer between -90 and 90 exclusive.7 ^? nDegreesLatitudeJust (DegreesLatitude 7)0 ^? nDegreesLatitudeJust (DegreesLatitude 0)89 ^? nDegreesLatitudeJust (DegreesLatitude 89)90 ^? nDegreesLatitudeNothing(-89) ^? nDegreesLatitudeJust (DegreesLatitude (-89))(-90) ^? nDegreesLatitudeNothing=all (\m -> nDegreesLatitude # m == n) (n ^? nDegreesLatitude)7878 Safe-InferredQAn isomorphism on the triple of degrees latitude, minutes, seconds to a latitude.kdo deg <- 7 ^? nDegreesLatitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLatitude@Just (Latitude (DegreesLatitude 7) (Minutes 7) (Seconds 7.0000))ndo deg <- 89 ^? nDegreesLatitude; min <- 59 ^? nMinutes; sec <- 59 ^? nSeconds; (deg, min, sec) ^? dmsLatitudeCJust (Latitude (DegreesLatitude 89) (Minutes 59) (Seconds 59.0000))ndo deg <- (-7) ^? nDegreesLatitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLatitudeCJust (Latitude (DegreesLatitude (-7)) (Minutes 7) (Seconds 7.0000))qdo deg <- (-89) ^? nDegreesLatitude; min <- 59 ^? nMinutes; sec <- 59 ^? nSeconds; (deg, min, sec) ^? dmsLatitudeFJust (Latitude (DegreesLatitude (-89)) (Minutes 59) (Seconds 59.0000))ndo deg <- 90 ^? nDegreesLatitude; min <- 59 ^? nMinutes; sec <- 59 ^? nSeconds; (deg, min, sec) ^? dmsLatitudeNothingndo deg <- 89 ^? nDegreesLatitude; min <- 60 ^? nMinutes; sec <- 59 ^? nSeconds; (deg, min, sec) ^? dmsLatitudeNothingndo deg <- 89 ^? nDegreesLatitude; min <- 59 ^? nMinutes; sec <- 60 ^? nSeconds; (deg, min, sec) ^? dmsLatitudeNothing)fmap (dmsLatitude #) (7 ^? fracLatitude)1Just (DegreesLatitude 7,Minutes 0,Seconds 0.0000),fmap (dmsLatitude #) (7.12 ^? fracLatitude)2Just (DegreesLatitude 7,Minutes 7,Seconds 12.0000)=A prism on latitude to a double between -90 and 90 exclusive.7 ^? fracLatitude@Just (Latitude (DegreesLatitude 7) (Minutes 0) (Seconds 0.0000))(-7) ^? fracLatitudeCJust (Latitude (DegreesLatitude (-7)) (Minutes 0) (Seconds 0.0000))7.12 ^? fracLatitudeAJust (Latitude (DegreesLatitude 7) (Minutes 7) (Seconds 12.0000))(-7.12) ^? fracLatitudeDJust (Latitude (DegreesLatitude (-7)) (Minutes 7) (Seconds 12.0000)),fmap (fracLatitude #) (7.12 ^? fracLatitude) Just 7.12/fmap (fracLatitude #) ((-7.12) ^? fracLatitude) Just (-7.12)90 ^? fracLatitudeNothing(-90) ^? fracLatitudeNothing15.63791 ^? fracLatitudeCJust (Latitude (DegreesLatitude 15) (Minutes 38) (Seconds 16.4760))89.1 ^? fracLatitudeBJust (Latitude (DegreesLatitude 89) (Minutes 5) (Seconds 60.0000))89.2 ^? fracLatitudeBJust (Latitude (DegreesLatitude 89) (Minutes 12) (Seconds 0.0000))ƒfmap (fracLatitude #) (do deg <- 7 ^? nDegreesLatitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLatitude)Just 7.118611111111111…fmap (fracLatitude #) (do deg <- 89 ^? nDegreesLatitude; min <- 15 ^? nMinutes; sec <- 6 ^? nSeconds; (deg, min, sec) ^? dmsLatitude)Just 89.25166666666667*A prism on latitude to a double between -À2 and À 2 exclusive.0.2 ^? radianLatitudeCJust (Latitude (DegreesLatitude 11) (Minutes 27) (Seconds 32.9612))1.3 ^? radianLatitudeBJust (Latitude (DegreesLatitude 74) (Minutes 29) (Seconds 4.2481))(-1.3) ^? radianLatitudeEJust (Latitude (DegreesLatitude (-74)) (Minutes 29) (Seconds 4.2481))1.5707963 ^? radianLatitudeCJust (Latitude (DegreesLatitude 89) (Minutes 59) (Seconds 59.9945))1.58 ^? radianLatitudeNothing(-1.58) ^? radianLatitudeNothing…fmap (radianLatitude #) (do deg <- 7 ^? nDegreesLatitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLatitude)Just 0.12424320205794079‡fmap (radianLatitude #) (do deg <- 89 ^? nDegreesLatitude; min <- 15 ^? nMinutes; sec <- 6 ^? nSeconds; (deg, min, sec) ^? dmsLatitude)Just 1.5577354462258057 9:;<= 9:;<= Safe-InferredHM!1Build a coordinate from a latitude and longitude."jBuild a coordinate from a fractional latitude and fractional longitude. Fails if either are out of range.#fBuild a coordinate from a radian latitude and fractional longitude. Fails if either are out of range.$,A prism on the pair (below) to a coordinate:?a fractional latitude to a double between -90 and 90 exclusive.Ba fractional longitude to a double between -180 and 180 exclusive.%,A prism on the pair (below) to a coordinate:(a radian latitude to a double between -À2 and À 2 exclusive.:a radian longitude to a double between -À and À exclusive. >!"#?$%&'()*@ABCD  !"#$%&'()* !"#$%&'()* >!"#?$%&'()*@ABCD Safe-Inferred+  !"#$%&'()*E      !"#$%&'()*+,-./01234 56789:;<#=>?@)ABCDEFGcoordinate-0.0.10Data.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 HasSecondssecondsSeconds modSecondsnSeconds HasMinutesminutesMinutes modMinutesnMinutesHasDegreesLongitudedegreesLongitudeDegreesLongitudenDegreesLongitude HasLongitude longitude Longitude dmsLongitude fracLongituderadianLongitudeHasDegreesLatitudedegreesLatitudeDegreesLatitudenDegreesLatitude HasLatitudelatitudeLatitude dmsLatitude fracLatituderadianLatitude HasCoordinate coordinate Coordinate.#.<°><㎭>fracCoordinateradianCoordinatecoordinateLatLoncoordinateLonLatcoordinateDMSLatLoncoordinateLatDMSLoncoordinateDMSLatDMSLon $fShowSeconds$fHasSecondsSeconds$fHasMinutesMinutes%$fHasDegreesLongitudeDegreesLongitude$fHasSecondsLongitude$fHasMinutesLongitude$fHasDegreesLongitudeLongitude$fHasLongitudeLongitude#$fHasDegreesLatitudeDegreesLatitude$fHasSecondsLatitude$fHasMinutesLatitude$fHasDegreesLatitudeLatitude$fHasLatitudeLatitudecoordinatePrism$fHasDegreesLongitudeCoordinate$fHasDegreesLatitudeCoordinate$fHasLongitudeCoordinate$fHasLatitudeCoordinate$fHasCoordinateCoordinate