{-# LANGUAGE GeneralizedNewtypeDeriving, MultiParamTypeClasses #-}

-- | An azimuth in degrees between 0 and 360).
module Data.Geo.Azimuth(
                         Azimuth,
                         azimuth
                       ) where

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

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

-- | Construct an azimuth with the number of degrees.
azimuth :: Double -> Azimuth
azimuth x = Azimuth (x `mod'` 360)

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