{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DefaultSignatures #-}
module Data.Aviation.Aip.ListItemLinks(
ListItemLinks(..)
, AsListItemLinks(..)
, FoldListItemLinks(..)
, GetListItemLinks(..)
, SetListItemLinks(..)
, ManyListItemLinks(..)
, HasListItemLinks(..)
, IsListItemLinks(..)
) 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.ListItemLink(ListItemLink, ManyListItemLink(_ManyListItemLink), SetListItemLink, FoldListItemLink(_FoldListItemLink))
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 ListItemLinks =
ListItemLinks
[ListItemLink]
deriving (Eq, Ord, Show)
instance FromJSON ListItemLinks where
parseJSON =
withArray "ListItemLinks" $ \v ->
ListItemLinks <$> traverse parseJSON (toList v)
instance ToJSON ListItemLinks where
toJSON (ListItemLinks x) =
toJSON x
instance Semigroup ListItemLinks where
ListItemLinks x <> ListItemLinks y =
ListItemLinks (x <> y)
instance Monoid ListItemLinks where
mappend =
(<>)
mempty =
ListItemLinks []
instance Wrapped ListItemLinks where
type Unwrapped ListItemLinks =
[ListItemLink]
_Wrapped' =
iso (\(ListItemLinks x) -> x) ListItemLinks
instance ListItemLinks ~ x =>
Rewrapped ListItemLinks x
instance Cons ListItemLinks ListItemLinks ListItemLink ListItemLink where
_Cons =
_Wrapped . _Cons . seconding (from _Wrapped)
instance Snoc ListItemLinks ListItemLinks ListItemLink ListItemLink where
_Snoc =
_Wrapped . _Snoc . firsting (from _Wrapped)
instance Each ListItemLinks ListItemLinks ListItemLink ListItemLink where
each =
_Wrapped . each
instance Reversing ListItemLinks where
reversing =
_Wrapped %~ reversing
instance Plated ListItemLinks where
plate =
_Wrapped . plate . from _Wrapped
type instance IxValue ListItemLinks = ListItemLink
type instance Index ListItemLinks = Int
instance Ixed ListItemLinks where
ix i =
_Wrapped . ix i
class ManyListItemLinks a => AsListItemLinks a where
_ListItemLinks ::
Prism' a ListItemLinks
default _ListItemLinks ::
IsListItemLinks a =>
Prism' a ListItemLinks
_ListItemLinks =
_IsListItemLinks
instance AsListItemLinks ListItemLinks where
_ListItemLinks =
id
class FoldListItemLinks a where
_FoldListItemLinks ::
Fold a ListItemLinks
instance FoldListItemLinks ListItemLinks where
_FoldListItemLinks =
id
class FoldListItemLinks a => GetListItemLinks a where
_GetListItemLinks ::
Getter a ListItemLinks
default _GetListItemLinks ::
HasListItemLinks a =>
Getter a ListItemLinks
_GetListItemLinks =
listItemLinks
instance GetListItemLinks ListItemLinks where
_GetListItemLinks =
id
class SetListItemLinks a where
_SetListItemLinks ::
Setter' a ListItemLinks
default _SetListItemLinks ::
ManyListItemLinks a =>
Setter' a ListItemLinks
_SetListItemLinks =
_ManyListItemLinks
instance SetListItemLinks ListItemLinks where
_SetListItemLinks =
id
class (FoldListItemLinks a, SetListItemLinks a) => ManyListItemLinks a where
_ManyListItemLinks ::
Traversal' a ListItemLinks
instance ManyListItemLinks ListItemLinks where
_ManyListItemLinks =
id
class (GetListItemLinks a, ManyListItemLinks a) => HasListItemLinks a where
listItemLinks ::
Lens' a ListItemLinks
default listItemLinks ::
IsListItemLinks a =>
Lens' a ListItemLinks
listItemLinks =
_IsListItemLinks
instance HasListItemLinks ListItemLinks where
listItemLinks =
id
class (HasListItemLinks a, AsListItemLinks a) => IsListItemLinks a where
_IsListItemLinks ::
Iso' a ListItemLinks
instance IsListItemLinks ListItemLinks where
_IsListItemLinks =
id
instance SetListItemLinks () where
instance FoldListItemLinks () where
_FoldListItemLinks =
_ManyListItemLinks
instance ManyListItemLinks () where
_ManyListItemLinks _ x =
pure x
instance SetListItemLink ListItemLinks where
instance FoldListItemLink ListItemLinks where
_FoldListItemLink =
_ManyListItemLink
instance ManyListItemLink ListItemLinks where
_ManyListItemLink f (ListItemLinks x) =
ListItemLinks <$> traverse f x
instance SetHref ListItemLinks where
instance FoldHref ListItemLinks where
_FoldHref =
_ManyHref
instance ManyHref ListItemLinks where
_ManyHref =
_Wrapped . traverse . _ManyHref