aip-0.1.0: src/Data/Aviation/Aip/DAPEntries.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE DefaultSignatures #-}
module Data.Aviation.Aip.DAPEntries(
DAPEntries(..)
, AsDAPEntries(..)
, FoldDAPEntries(..)
, GetDAPEntries(..)
, SetDAPEntries(..)
, ManyDAPEntries(..)
, HasDAPEntries(..)
, IsDAPEntries(..)
) where
import Control.Category((.), id)
import Control.Applicative(pure)
import Control.Lens
import Data.Aeson(FromJSON(parseJSON), ToJSON(toJSON), withArray)
import Data.Aviation.Aip.Href(SetHref, FoldHref, ManyHref(_ManyHref), FoldHref(_FoldHref))
import Data.Aviation.Aip.DAPEntry(DAPEntry)
import Data.Eq(Eq)
import Data.Foldable(toList)
import Data.Function(($))
import Data.Functor((<$>))
import Data.Int(Int)
import Data.Monoid(Monoid(mappend, mempty))
import Data.Ord(Ord)
import Data.Semigroup(Semigroup((<>)))
import Prelude(Show)
newtype DAPEntries =
DAPEntries
[DAPEntry]
deriving (Eq, Ord, Show)
instance Semigroup DAPEntries where
DAPEntries x <> DAPEntries y =
DAPEntries (x <> y)
instance Monoid DAPEntries where
mappend =
(<>)
mempty =
DAPEntries mempty
instance Wrapped DAPEntries where
type Unwrapped DAPEntries = [DAPEntry]
_Wrapped' =
iso
(\(DAPEntries x) -> x)
DAPEntries
instance DAPEntries ~ a =>
Rewrapped DAPEntries a
instance FromJSON DAPEntries where
parseJSON =
withArray "DAPEntries" $ \v ->
DAPEntries <$> traverse parseJSON (toList v)
instance ToJSON DAPEntries where
toJSON (DAPEntries x) =
toJSON x
instance Cons DAPEntries DAPEntries DAPEntry DAPEntry where
_Cons =
_Wrapped . _Cons . seconding (from _Wrapped)
instance Snoc DAPEntries DAPEntries DAPEntry DAPEntry where
_Snoc =
_Wrapped . _Snoc . firsting (from _Wrapped)
instance Each DAPEntries DAPEntries DAPEntry DAPEntry where
each =
_Wrapped . each
instance Reversing DAPEntries where
reversing =
_Wrapped %~ reversing
instance Plated DAPEntries where
plate =
_Wrapped . plate . from _Wrapped
type instance IxValue DAPEntries = DAPEntry
type instance Index DAPEntries = Int
instance Ixed DAPEntries where
ix i =
_Wrapped . ix i
class ManyDAPEntries a => AsDAPEntries a where
_DAPEntries ::
Prism' a DAPEntries
default _DAPEntries ::
IsDAPEntries a =>
Prism' a DAPEntries
_DAPEntries =
_IsDAPEntries
instance AsDAPEntries DAPEntries where
_DAPEntries =
id
class FoldDAPEntries a where
_FoldDAPEntries ::
Fold a DAPEntries
instance FoldDAPEntries DAPEntries where
_FoldDAPEntries =
id
class FoldDAPEntries a => GetDAPEntries a where
_GetDAPEntries ::
Getter a DAPEntries
default _GetDAPEntries ::
HasDAPEntries a =>
Getter a DAPEntries
_GetDAPEntries =
dapEntries
instance GetDAPEntries DAPEntries where
_GetDAPEntries =
id
class SetDAPEntries a where
_SetDAPEntries ::
Setter' a DAPEntries
default _SetDAPEntries ::
ManyDAPEntries a =>
Setter' a DAPEntries
_SetDAPEntries =
_ManyDAPEntries
instance SetDAPEntries DAPEntries where
_SetDAPEntries =
id
class (FoldDAPEntries a, SetDAPEntries a) => ManyDAPEntries a where
_ManyDAPEntries ::
Traversal' a DAPEntries
instance ManyDAPEntries DAPEntries where
_ManyDAPEntries =
id
class (GetDAPEntries a, ManyDAPEntries a) => HasDAPEntries a where
dapEntries ::
Lens' a DAPEntries
default dapEntries ::
IsDAPEntries a =>
Lens' a DAPEntries
dapEntries =
_IsDAPEntries
instance HasDAPEntries DAPEntries where
dapEntries =
id
class (HasDAPEntries a, AsDAPEntries a) => IsDAPEntries a where
_IsDAPEntries ::
Iso' a DAPEntries
instance IsDAPEntries DAPEntries where
_IsDAPEntries =
id
instance SetDAPEntries () where
instance FoldDAPEntries () where
_FoldDAPEntries =
_ManyDAPEntries
instance ManyDAPEntries () where
_ManyDAPEntries _ x =
pure x
instance SetHref DAPEntries where
instance FoldHref DAPEntries where
_FoldHref =
_ManyHref
instance ManyHref DAPEntries where
_ManyHref =
_Wrapped . traverse . _ManyHref