packages feed

coordinate 0.0.4 → 0.0.5

raw patch · 3 files changed

+97/−8 lines, 3 files

Files

coordinate.cabal view
@@ -1,5 +1,5 @@ name:               coordinate-version:            0.0.4+version:            0.0.5 license:            BSD3 license-File:       etc/LICENCE author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
src/Data/Geo/Coordinate/Latitude.hs view
@@ -3,16 +3,17 @@ , HasLatitude(..) , dmsLatitude , fracLatitude+, radianLatitude ) where -import Prelude(Double, Eq, Show, Ord(..), Num(..), Bool(..), Monad(..), id, (&&), properFraction, fromIntegral)+import Prelude(Double, Eq, Show, Ord(..), Num(..), Floating(..), Fractional(..), Bool(..), Monad(..), id, (&&), (.), properFraction, fromIntegral) import Control.Lens(Iso', Prism', Lens', iso, prism', lens, (#), (^?)) import Data.Geo.Coordinate.DegreesLatitude import Data.Geo.Coordinate.Minutes import Data.Geo.Coordinate.Seconds  -- $setup--- >>> import Control.Lens((^?))+-- >>> import Prelude(Functor(..))  data Latitude =   Latitude@@ -43,12 +44,18 @@ -- -- >>> do deg <- 89 ^? nDegreesLatitude; min <- 59 ^? nMinutes; sec <- 60 ^? nSeconds; (deg, min, sec) ^? dmsLatitude -- Nothing+--+-- >>> fmap (dmsLatitude #)  (7 ^? fracLatitude)+-- Just (DegreesLatitude 7,Minutes 0,Seconds 0.0000)+--+-- >>> fmap (dmsLatitude #)  (7.12 ^? fracLatitude)+-- Just (DegreesLatitude 7,Minutes 7,Seconds 12.0000) dmsLatitude ::   Iso' (DegreesLatitude, Minutes, Seconds) Latitude dmsLatitude =   iso (\(d, m, s) -> Latitude d m s) (\(Latitude d m s) -> (d, m, s)) --- | A prism on latitude to a double between -90 and 90 inclusive.+-- | A prism on latitude to a double between -90 and 90 exclusive. -- -- >>> 7 ^? fracLatitude -- Just (Latitude (DegreesLatitude 7) (Minutes 0) (Seconds 0.0000))@@ -76,17 +83,53 @@ -- -- >>> 89.2 ^? fracLatitude -- Just (Latitude (DegreesLatitude 89) (Minutes 12) (Seconds 0.0000))+--+-- >>> fmap (fracLatitude #) (do deg <- 7 ^? nDegreesLatitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLatitude)+-- Just 7.118611111111111+--+-- >>> fmap (fracLatitude #) (do deg <- 89 ^? nDegreesLatitude; min <- 15 ^? nMinutes; sec <- 6 ^? nSeconds; (deg, min, sec) ^? dmsLatitude)+-- Just 89.25166666666667 fracLatitude ::   Prism' Double Latitude fracLatitude =   prism' (\(Latitude d m s) ->-    fromIntegral (nDegreesLatitude # d) + nSeconds # s + fromIntegral (nMinutes # m * 60))+    fromIntegral (nDegreesLatitude # d) + (fromIntegral (nMinutes # m) / 60) + (nSeconds # s) / 3600)     (\x -> let (d, z) = properFraction x                (m, s) = properFraction ((z :: Double) * 60)            in do d' <- d ^? nDegreesLatitude                  m' <- abs m ^? nMinutes                  s' <- (abs s * 60) ^? nSeconds                  return (Latitude d' m' s'))++-- | A prism on latitude to a double between -π/2 and π/2 exclusive.+--+-- >>> 0.2 ^? radianLatitude+-- Just (Latitude (DegreesLatitude 11) (Minutes 27) (Seconds 32.9612))+--+-- >>> 1.3 ^? radianLatitude+-- Just (Latitude (DegreesLatitude 74) (Minutes 29) (Seconds 4.2481))+--+-- >>> (-1.3) ^? radianLatitude+-- Just (Latitude (DegreesLatitude (-74)) (Minutes 29) (Seconds 4.2481))+--+-- >>> 1.5707963 ^? radianLatitude+-- Just (Latitude (DegreesLatitude 89) (Minutes 59) (Seconds 59.9945))+--+-- >>> 1.58 ^? radianLatitude+-- Nothing+--+-- >>> (-1.58) ^? radianLatitude+-- Nothing+--+-- >>> fmap (radianLatitude #) (do deg <- 7 ^? nDegreesLatitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLatitude)+-- Just 0.12424320205794079+--+-- >>> fmap (radianLatitude #) (do deg <- 89 ^? nDegreesLatitude; min <- 15 ^? nMinutes; sec <- 6 ^? nSeconds; (deg, min, sec) ^? dmsLatitude)+-- Just 1.5577354462258057+radianLatitude ::+  Prism' Double Latitude+radianLatitude =+  iso (\n -> n * 180 / pi) (\n -> n * pi / 180) . fracLatitude  class HasLatitude t where   latitude ::
src/Data/Geo/Coordinate/Longitude.hs view
@@ -3,14 +3,18 @@ , HasLongitude(..) , dmsLongitude , fracLongitude+, radianLongitude ) where -import Prelude(Double, Eq, Show, Ord(..), Num(..), Bool(..), Monad(..), id, (&&), properFraction, fromIntegral)+import Prelude(Double, Eq, Show, Ord(..), Num(..), Floating(..), Fractional(..), Bool(..), Monad(..), id, (&&), (.), properFraction, fromIntegral) import Control.Lens(Iso', Prism', Lens', iso, prism', lens, (#), (^?)) import Data.Geo.Coordinate.DegreesLongitude import Data.Geo.Coordinate.Minutes import Data.Geo.Coordinate.Seconds +-- $setup+-- >>> import Prelude(Functor(..))+ data Longitude =   Longitude     DegreesLongitude@@ -40,12 +44,18 @@ -- -- >>> do deg <- 179 ^? nDegreesLongitude; min <- 59 ^? nMinutes; sec <- 60 ^? nSeconds; (deg, min, sec) ^? dmsLongitude -- Nothing+--+-- >>> fmap (dmsLongitude #)  (7 ^? fracLongitude)+-- Just (DegreesLongitude 7,Minutes 0,Seconds 0.0000)+--+-- >>> fmap (dmsLongitude #)  (7.12 ^? fracLongitude)+-- Just (DegreesLongitude 7,Minutes 7,Seconds 12.0000) dmsLongitude ::   Iso' (DegreesLongitude, Minutes, Seconds) Longitude dmsLongitude =   iso (\(d, m, s) -> Longitude d m s) (\(Longitude d m s) -> (d, m, s)) --- | A prism on longitude to a double between -180 and 180 inclusive.+-- | A prism on longitude to a double between -180 and 180 exclusive. -- -- >>> 7 ^? fracLongitude -- Just (Longitude (DegreesLongitude 7) (Minutes 0) (Seconds 0.0000))@@ -73,17 +83,53 @@ -- -- >>> 179.2 ^? fracLongitude -- Just (Longitude (DegreesLongitude 179) (Minutes 11) (Seconds 60.0000))+--+-- >>> fmap (fracLongitude #) (do deg <- 7 ^? nDegreesLongitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLongitude)+-- Just 7.118611111111111+--+-- >>> fmap (fracLongitude #) (do deg <- 179 ^? nDegreesLongitude; min <- 15 ^? nMinutes; sec <- 6 ^? nSeconds; (deg, min, sec) ^? dmsLongitude)+-- Just 179.25166666666667 fracLongitude ::   Prism' Double Longitude fracLongitude =   prism' (\(Longitude d m s) ->-    fromIntegral (nDegreesLongitude  # d) + nSeconds # s + fromIntegral (nMinutes # m * 60))+    fromIntegral (nDegreesLongitude # d) + (fromIntegral (nMinutes # m) / 60) + (nSeconds # s) / 3600)     (\x -> let (d, z) = properFraction x                (m, s) = properFraction ((z :: Double) * 60)            in do d' <- d ^? nDegreesLongitude                  m' <- abs m ^? nMinutes                  s' <- (abs s * 60) ^? nSeconds                  return (Longitude d' m' s'))++-- | A prism on longitude to a double between -π and π exclusive.+--+-- >>> 0.2 ^? radianLongitude+-- Just (Longitude (DegreesLongitude 11) (Minutes 27) (Seconds 32.9612))+--+-- >>> 1.3 ^? radianLongitude+-- Just (Longitude (DegreesLongitude 74) (Minutes 29) (Seconds 4.2481))+--+-- >>> (-1.3) ^? radianLongitude+-- Just (Longitude (DegreesLongitude (-74)) (Minutes 29) (Seconds 4.2481))+--+-- >>> 3.14159 ^? radianLongitude+-- Just (Longitude (DegreesLongitude 179) (Minutes 59) (Seconds 59.4527))+--+-- >>> 3.15 ^? radianLongitude+-- Nothing+--+-- >>> (-3.15) ^? radianLongitude+-- Nothing+--+-- >>> fmap (radianLongitude #) (do deg <- 7 ^? nDegreesLongitude; min <- 7 ^? nMinutes; sec <- 7 ^? nSeconds; (deg, min, sec) ^? dmsLongitude)+-- Just 0.12424320205794079+--+-- >>> fmap (radianLongitude #) (do deg <- 179 ^? nDegreesLongitude; min <- 15 ^? nMinutes; sec <- 6 ^? nSeconds; (deg, min, sec) ^? dmsLongitude)+-- Just 3.1285317730207023+radianLongitude ::+  Prism' Double Longitude+radianLongitude =+  iso (\n -> n * 180 / pi) (\n -> n * pi / 180) . fracLongitude  class HasLongitude t where   longitude ::