packages feed

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 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(..))