{-# LANGUAGE GeneralizedNewtypeDeriving, MultiParamTypeClasses #-}

-- | A longitude on earth in degrees.
module Data.Geo.Longitude(
                           Longitude,
                           longitude
                         ) where

import Data.Geo.Accessor.Value
import Data.Fixed

newtype Longitude = Longitude Double
  deriving (Eq, Ord, Enum, Show, Num, Fractional, Floating)

-- | Construct a longitude using the given number of degrees between -180 and 180.
longitude :: Double -> Longitude
longitude x = Longitude ((x + 180) `mod'` 360 - 180)

instance Value Longitude Double where
  value (Longitude x) = x