coordinate 0.0.12 → 0.0.13
raw patch · 5 files changed
+49/−35 lines, 5 filesdep +taggedPVP ok
version bump matches the API change (PVP)
Dependencies added: tagged
API changes (from Hackage documentation)
Files
- changelog +6/−0
- coordinate.cabal +2/−1
- src/Data/Geo/Coordinate/Coordinate.hs +36/−31
- src/Data/Geo/Coordinate/Latitude.hs +2/−1
- src/Data/Geo/Coordinate/Longitude.hs +3/−2
changelog view
@@ -1,3 +1,9 @@+0.0.13++* Tidy up imports+:+* Tidy up code duplication+ 0.0.12 * Remove extraneous frac Prism
coordinate.cabal view
@@ -1,5 +1,5 @@ name: coordinate-version: 0.0.12+version: 0.0.13 license: BSD3 license-file: LICENCE author: Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>@@ -28,6 +28,7 @@ build-depends: base < 5 && >= 3 , lens >= 4.0+ , tagged >= 0.7 , transformers >= 0.3.0.0 ghc-options:
src/Data/Geo/Coordinate/Coordinate.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} module Data.Geo.Coordinate.Coordinate(@@ -13,9 +14,10 @@ import Control.Applicative(Applicative) import Control.Category(Category(id, (.)))-import Control.Lens(Choice, swapped, Profunctor, Optic', (^.), iso, lens, prism', swapped, (^?), (#))+import Control.Lens(Identity, Const, Prism', Choice, swapped, Profunctor, Optic', (^.), iso, lens, prism', swapped, (^?), (#)) import Control.Monad(Monad(return)) import Data.Eq(Eq)+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)@@ -23,9 +25,11 @@ import Data.Geo.Coordinate.Minutes(Minutes) import Data.Geo.Coordinate.Seconds(Seconds) import Data.Maybe(Maybe)+import Data.Monoid(First) import Data.Ord(Ord)+import Data.Tagged(Tagged) import Data.Tuple(curry, uncurry)-import Prelude(Double, Functor, Show, Double)+import Prelude(Show, Double) data Coordinate = Coordinate@@ -96,48 +100,49 @@ _Coordinate = swapped . _Coordinate -instance (Choice p, Applicative f) => AsCoordinate p f (Double, Double) where- _Coordinate =- prism'- (\(Coordinate lat lon) -> (_Latitude # lat, _Longitude # lon))+coordinatePrism' ::+ (+ AsLatitude Tagged Identity lat+ , AsLatitude (->) (Const (First Latitude)) lat+ , AsLongitude Tagged Identity lon+ , AsLongitude (->) (Const (First Longitude)) lon) =>+ Prism' (lat, lon) Coordinate+coordinatePrism' =+ coordinatePrism (_Latitude #) (_Longitude #) (^? _Latitude) (^? _Longitude)++coordinatePrism ::+ (Latitude -> lat)+ -> (Longitude -> lon)+ -> (lat -> Maybe Latitude)+ -> (lon -> Maybe Longitude)+ -> Prism' (lat, lon) Coordinate+coordinatePrism f g h i =+ prism'+ (\(Coordinate lat lon) -> (f lat, g lon)) (\(lat, lon) ->- do lat' <- lat ^? _Latitude- lon' <- lon ^? _Longitude+ do lat' <- h lat+ lon' <- i lon return (Coordinate lat' lon')) -instance (Choice p, Applicative f) => AsCoordinate p f (Latitude, Double) where+instance (Choice p, Applicative f) => AsCoordinate p f (Double, Double) where _Coordinate =- prism'- (\(Coordinate lat lon) -> (lat, _Longitude # lon))- (\(lat, lon) ->- do lon' <- lon ^? _Longitude- return (Coordinate lat lon'))+ coordinatePrism' +instance (Choice p, Applicative f) => AsCoordinate p f (Latitude, Double) where+ _Coordinate =+ coordinatePrism id (_Longitude #) return (^? _Longitude)+ instance (Choice p, Applicative f) => AsCoordinate p f (Double, Longitude) where _Coordinate =- prism'- (\(Coordinate lat lon) -> (_Latitude # lat, lon))- (\(lat, lon) ->- do lat' <- lat ^? _Latitude- return (Coordinate lat' lon))+ coordinatePrism (_Latitude #) id (^? _Latitude) return instance (Choice p, Applicative f) => AsCoordinate p f ((DegreesLatitude, Minutes, Seconds), Double) where _Coordinate =- prism'- (\(Coordinate lat lon) -> (_Latitude # lat, _Longitude # lon))- (\(lat, lon) ->- do lat' <- lat ^? _Latitude- lon' <- lon ^? _Longitude- return (Coordinate lat' lon'))+ coordinatePrism' instance (Choice p, Applicative f) => AsCoordinate p f (Double, (DegreesLongitude, Minutes, Seconds)) where _Coordinate =- prism'- (\(Coordinate lat lon) -> (_Latitude # lat, _Longitude # lon))- (\(lat, lon) ->- do lat' <- lat ^? _Latitude- lon' <- lon ^? _Longitude- return (Coordinate lat' lon'))+ coordinatePrism' instance (p ~ (->), Functor f) => AsLatitude p f Coordinate where _Latitude =
src/Data/Geo/Coordinate/Latitude.hs view
@@ -13,11 +13,12 @@ import Control.Lens(Choice, Profunctor, Optic', iso, prism', lens, (#), (^?)) import Control.Monad(Monad(return)) import Data.Eq(Eq)+import Data.Functor(Functor) import Data.Geo.Coordinate.DegreesLatitude(DegreesLatitude, AsDegreesLatitude(_DegreesLatitude)) import Data.Geo.Coordinate.Minutes(AsMinutes(_Minutes), Minutes) import Data.Geo.Coordinate.Seconds(AsSeconds(_Seconds), Seconds) import Data.Ord(Ord((<)))-import Prelude(Functor, Double, Show, Int, Num((+), (*), (-), abs), Fractional((/)), properFraction, fromIntegral)+import Prelude(Double, Show, Int, Num((+), (*), (-), abs), Fractional((/)), properFraction, fromIntegral) -- $setup -- >>> import Prelude(Functor(..))
src/Data/Geo/Coordinate/Longitude.hs view
@@ -10,14 +10,15 @@ import Control.Applicative(Applicative) import Control.Category(Category(id))-import Control.Lens(Choice, Profunctor, Optic', Prism', iso, prism', lens, (#), (^?))+import Control.Lens(Choice, Profunctor, Optic', iso, prism', lens, (#), (^?)) import Control.Monad(Monad(return)) import Data.Eq(Eq)+import Data.Functor(Functor) import Data.Geo.Coordinate.DegreesLongitude(DegreesLongitude, AsDegreesLongitude(_DegreesLongitude)) import Data.Geo.Coordinate.Minutes(AsMinutes(_Minutes), Minutes) import Data.Geo.Coordinate.Seconds(AsSeconds(_Seconds), Seconds) import Data.Ord(Ord((<)))-import Prelude(Functor, Double, Show, Int, Num((+), (*), (-), abs), Fractional((/)), properFraction, fromIntegral)+import Prelude(Double, Show, Int, Num((+), (*), (-), abs), Fractional((/)), properFraction, fromIntegral) -- $setup -- >>> import Prelude(Functor(..))