module Data.GPS.Coordinate.DegreesLongitude(
  DegreesLongitude
, HasDegreesLongitude(..)
, nDegreesLongitude
) where

import Prelude(Int, Bool(..), Eq, Show, Ord(..), id, (&&))
import Data.Maybe(Maybe(..))
import Control.Lens(Prism', Lens', prism')

newtype DegreesLongitude =
  DegreesLongitude Int
  deriving (Eq, Show)

nDegreesLongitude ::
  Prism' Int DegreesLongitude
nDegreesLongitude  =
  prism'
    (\(DegreesLongitude i) -> i)
    (\i -> case i >= -180 && i <= 180 of
             True -> Just (DegreesLongitude i)
             False -> Nothing)

class HasDegreesLongitude t where
  degreesLongitude ::
    Lens' t DegreesLongitude

instance HasDegreesLongitude DegreesLongitude where
  degreesLongitude =
    id