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 +6/−0
- coordinate.cabal +1/−1
- src/Data/Geo/Coordinate/Coordinate.hs +60/−8
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