-- | Convert types to and from radians/degrees. module Data.Geo.Radians( Radians, fromRadians, toRadians, radians ) where import Data.Geo.Latitude import Data.Geo.Longitude import Data.Geo.Bearing import Data.Geo.Accessor.Value import Control.Arrow class Radians a where toRadians :: a -> Double fromRadians :: Double -> a instance Radians Double where toRadians n = n * pi / 180 fromRadians n = n * 180 / pi instance Radians Latitude where toRadians = toRadians . value fromRadians = latitude . fromRadians instance Radians Longitude where toRadians = toRadians . value fromRadians = longitude . fromRadians instance Radians Bearing where toRadians = toRadians . value fromRadians = bearing . fromRadians -- | Convert two values to radians. radians :: (Radians a, Radians b) => a -> b -> (Double, Double) radians = curry (toRadians *** toRadians)