packages feed

coordinate 0.0.18 → 0.0.19

raw patch · 3 files changed

+67/−9 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Data.Geo.Coordinate.Coordinate: instance (p ~ (->), Applicative f) => AsMinutes p f Coordinate
+ Data.Geo.Coordinate.Coordinate: instance (p ~ (->), Applicative f) => AsSeconds p f Coordinate
+ Data.Geo.Coordinate.Coordinate: latitudeMinutes :: (AsCoordinate (->) f coord, Functor f) => Optic' (->) f coord Minutes
+ Data.Geo.Coordinate.Coordinate: latitudeSeconds :: (AsCoordinate (->) f coord, Functor f) => Optic' (->) f coord Seconds
+ Data.Geo.Coordinate.Coordinate: longitudeMinutes :: (AsCoordinate (->) f coord, Functor f) => Optic' (->) f coord Minutes
+ Data.Geo.Coordinate.Coordinate: longitudeSeconds :: (AsCoordinate (->) f coord, Functor f) => Optic' (->) f coord Seconds
- Data.Geo.Coordinate.Coordinate: (.#.) :: Latitude -> Longitude -> Coordinate
+ Data.Geo.Coordinate.Coordinate: (.#.) :: (AsLatitude (->) (Const Latitude) lat, AsLongitude (->) (Const Longitude) lon) => lat -> lon -> Coordinate

Files

changelog view
@@ -1,3 +1,9 @@+0.0.19++* Add lenses from latitude, longitude minutes, seconds.+* Add traversals from coordinate to minutes, seconds.+* Generalise coordinate operators.+ 0.0.18  * Update dependency on `radian`.
coordinate.cabal view
@@ -1,5 +1,5 @@ name:               coordinate-version:            0.0.18+version:            0.0.19 license:            BSD3 license-file:       LICENCE author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
src/Data/Geo/Coordinate/Coordinate.hs view
@@ -8,22 +8,26 @@ module Data.Geo.Coordinate.Coordinate(   Coordinate , AsCoordinate(..)+, latitudeMinutes+, latitudeSeconds+, longitudeMinutes+, longitudeSeconds , (.#.) , (<°>) ) where -import Control.Applicative(Applicative)+import Control.Applicative(Applicative((<*>))) import Control.Category(Category(id, (.)))-import Control.Lens(Identity, Const, Prism', Choice, swapped, Profunctor, Optic', (^.), iso, lens, prism', swapped, (^?), (#))+import Control.Lens(Identity, Const, Prism', Choice, swapped, Profunctor, Optic', (^.), iso, from, lens, prism', swapped, (^?), (#)) import Control.Monad(Monad(return)) import Data.Eq(Eq)-import Data.Functor(Functor)+import Data.Functor(Functor, (<$>)) import Data.Geo.Coordinate.Latitude(AsLatitude(_Latitude), Latitude) import Data.Geo.Coordinate.Longitude(AsLongitude(_Longitude), Longitude) import Data.Geo.Coordinate.DegreesLatitude(AsDegreesLatitude(_DegreesLatitude), DegreesLatitude) import Data.Geo.Coordinate.DegreesLongitude(AsDegreesLongitude(_DegreesLongitude), DegreesLongitude)-import Data.Geo.Coordinate.Minutes(Minutes)-import Data.Geo.Coordinate.Seconds(Seconds)+import Data.Geo.Coordinate.Minutes(Minutes, AsMinutes(_Minutes))+import Data.Geo.Coordinate.Seconds(Seconds, AsSeconds(_Seconds)) import Data.Maybe(Maybe) import Data.Monoid(First) import Data.Ord(Ord)@@ -39,11 +43,17 @@  -- | Build a coordinate from a latitude and longitude. (.#.) ::-  Latitude-  -> Longitude+  (  +    AsLatitude (->) (Const Latitude) lat+  , AsLongitude (->) (Const Longitude) lon+  ) =>+  lat+  -> lon   -> Coordinate-(.#.) =+lat .#. lon =   Coordinate+    (lat ^. _Latitude)+    (lon ^. _Longitude)  -- | Build a coordinate from a fractional latitude and fractional longitude. Fails -- if either are out of range.@@ -159,3 +169,45 @@ instance (p ~ (->), Functor f) => AsDegreesLongitude p f Coordinate where   _DegreesLongitude =     _Longitude . _DegreesLongitude++instance (p ~ (->), Applicative f) => AsMinutes p f Coordinate where+  _Minutes f (Coordinate lat lon) =+    (\m1 m2 ->+      Coordinate+        (from _Latitude # (lat ^. _DegreesLatitude, m1, lat ^. _Seconds))+        (from _Longitude # (lon ^. _DegreesLongitude, m2, lon ^. _Seconds))) <$> +    f (lat ^. _Minutes) <*> +    f (lon ^. _Minutes)+    +instance (p ~ (->), Applicative f) => AsSeconds p f Coordinate where+  _Seconds f (Coordinate lat lon) =+    (\s1 s2 ->+      Coordinate+        (from _Latitude # (lat ^. _DegreesLatitude, lat ^. _Minutes, s1))+        (from _Longitude # (lon ^. _DegreesLongitude, lon ^. _Minutes, s2))) <$> +    f (lat ^. _Seconds) <*> +    f (lon ^. _Seconds)++latitudeMinutes ::  +  (AsCoordinate (->) f coord, Functor f) =>+  Optic' (->) f coord Minutes  +latitudeMinutes =+  _Coordinate . _Latitude . _Minutes++latitudeSeconds ::+  (AsCoordinate (->) f coord, Functor f) =>+  Optic' (->) f coord Seconds+latitudeSeconds =+  _Coordinate . _Latitude . _Seconds++longitudeMinutes ::+  (AsCoordinate (->) f coord, Functor f) =>+  Optic' (->) f coord Minutes  +longitudeMinutes =+  _Coordinate . _Longitude . _Minutes++longitudeSeconds ::+  (AsCoordinate (->) f coord, Functor f) =>+  Optic' (->) f coord Seconds+longitudeSeconds =+  _Coordinate . _Longitude . _Seconds