geodetic-types-0.0.1: src/Geodetics/Types/Longitude.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TypeFamilies #-}
module Geodetics.Types.Longitude(
Longitude(..)
, HasLongitude(..)
, AsLongitude(..)
, ManyLongitude(..)
, GetLongitude(..)
, SetLongitude(..)
, FoldLongitude(..)
, IsLongitude(..)
) where
import Control.Category((.), id)
import Control.Lens(Lens', Prism', Traversal', Getter, Setter', Fold, Iso', Wrapped(_Wrapped'), Unwrapped, iso, prism)
import Data.Either(Either(Right))
import Data.Eq(Eq)
import Data.Functor(fmap)
import Data.Ord(Ord)
import Numeric.Units.Dimensional.Prelude(Angle)
import Prelude(Double, Show)
newtype Longitude =
Longitude
(Angle Double)
deriving (Eq, Ord, Show)
instance Wrapped Longitude where
type Unwrapped Longitude =
Angle Double
_Wrapped' =
iso
(\(Longitude x) -> x)
Longitude
class HasLongitude a where
longitude ::
Lens' a Longitude
longitudeAngle ::
Lens' a (Angle Double)
{-# INLINE longitudeAngle #-}
longitudeAngle =
longitude . longitudeAngle
instance HasLongitude Longitude where
longitude =
id
longitudeAngle k (Longitude x) =
fmap Longitude (k x)
class ManyLongitude a => AsLongitude a where
_Longitude ::
Prism' a Longitude
_LongitudeFields ::
Prism' a (Angle Double)
_LongitudeFields =
_Longitude . _LongitudeFields
instance AsLongitude Longitude where
_Longitude =
id
_LongitudeFields =
prism
Longitude
(\(Longitude x) -> Right x)
class (FoldLongitude a, SetLongitude a) => ManyLongitude a where
_ManyLongitude ::
Traversal' a Longitude
instance ManyLongitude Longitude where
_ManyLongitude =
id
class FoldLongitude a => GetLongitude a where
_GetLongitude ::
Getter a Longitude
instance GetLongitude Longitude where
_GetLongitude =
id
class SetLongitude a where
_SetLongitude ::
Setter' a Longitude
instance SetLongitude Longitude where
_SetLongitude =
id
class FoldLongitude a where
_FoldLongitude ::
Fold a Longitude
instance FoldLongitude Longitude where
_FoldLongitude =
id
class (HasLongitude a, AsLongitude a) => IsLongitude a where
_IsLongitude ::
Iso' a Longitude
instance IsLongitude Longitude where
_IsLongitude =
id