packages feed

coordinate 0.0.6 → 0.0.7

raw patch · 4 files changed

+70/−3 lines, 4 files

Files

coordinate.cabal view
@@ -1,5 +1,5 @@ name:               coordinate-version:            0.0.6+version:            0.0.7 license:            BSD3 license-File:       etc/LICENCE author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
src/Data/Geo/Coordinate/Coordinate.hs view
@@ -1,6 +1,7 @@ module Data.Geo.Coordinate.Coordinate(   Coordinate , (.#.)+, (..#..) , HasCoordinate(..) , coordinateLatLon , coordinateLonLat@@ -9,8 +10,9 @@ , coordinateDMSLatDMSLon ) where -import Prelude(Eq, Show, Ord, id, (.))-import Control.Lens(Iso', Lens', iso, lens, mapping, swapped, withIso)+import Prelude(Eq, Show, Ord, Double, id, return, (.))+import Data.Maybe(Maybe)+import Control.Lens(Iso', Lens', iso, lens, mapping, swapped, withIso, (^?)) import Data.Geo.Coordinate.Latitude import Data.Geo.Coordinate.Longitude import Data.Geo.Coordinate.DegreesLatitude@@ -24,12 +26,24 @@     Longitude   deriving (Eq, Ord, Show) +-- | Build a coordinate from a latitude and longitude. (.#.) ::   Latitude   -> Longitude   -> Coordinate (.#.) =   Coordinate++-- | Build a coordinate from a fractional latitude and fractional longitude. Fails+-- if either are out of range.+(..#..) ::+  Double+  -> Double+  -> Maybe Coordinate+lat ..#.. lon =+  do lat' <- lat ^? fracLatitude+     lon' <- lon ^? fracLongitude+     return (lat' .#. lon')  coordinateLatLon ::   Iso' (Latitude, Longitude) Coordinate
src/Data/Geo/Coordinate/Minutes.hs view
@@ -2,11 +2,13 @@   Minutes , HasMinutes(..) , nMinutes+, modMinutes ) where  import Prelude(Functor, Int, Bool(..), Eq, Show, Ord(..), (&&), id) import Data.Maybe(Maybe(..)) import Control.Lens(Prism', Lens', prism')+import Data.Fixed(mod')  -- $setup -- >>> import Control.Lens((#), (^?))@@ -16,6 +18,29 @@ newtype Minutes =   Minutes Int   deriving (Eq, Ord, Show)++-- | 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+modMinutes ::+  Int+  -> Minutes+modMinutes x =+  Minutes (x `mod'` 60)  -- | A prism on minutes to an integer between 0 and 59 inclusive. --
src/Data/Geo/Coordinate/Seconds.hs view
@@ -1,6 +1,7 @@ module Data.Geo.Coordinate.Seconds(   Seconds , HasSeconds(..)+, modSeconds , nSeconds ) where @@ -8,6 +9,7 @@ import Data.Maybe(Maybe(..)) import Control.Lens(Prism', Lens', prism') import Text.Printf(printf)+import Data.Fixed(mod')  -- $setup -- >>> import Control.Lens((#), (^?))@@ -23,6 +25,32 @@ instance Show Seconds where   showsPrec n (Seconds d) =     showParen (n > 10) (showString ("Seconds " ++ printf "%0.4f" d))++-- | 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 7+-- Seconds 7.0000+--+-- >>> modSeconds 0+-- Seconds 0.0000+--+-- >>> modSeconds (-0.0001)+-- Seconds 59.9999+--+-- >>> modSeconds 60+-- Seconds 0.0000+--+-- >>> modSeconds 59.99999+-- Seconds 60.0000+--+-- >>> modSeconds 59.999+-- Seconds 59.9990+modSeconds ::+  Double+  -> Seconds+modSeconds x =+  Seconds (x `mod'` 60)  -- | A prism on seconds to a double between 0 inclusive and 60 exclusive. --