{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleInstances #-} module Data.Aviation.Aip.ErsaAerodromes( ErsaAerodromes(..) , AsErsaAerodromes(..) , FoldErsaAerodromes(..) , GetErsaAerodromes(..) , SetErsaAerodromes(..) , ManyErsaAerodromes(..) , HasErsaAerodromes(..) , IsErsaAerodromes(..) ) where import Control.Category((.), id) import Control.Applicative(pure) import Control.Lens import Data.Aeson(FromJSON(parseJSON), ToJSON(toJSON), withArray) 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) import Data.Aviation.Aip.ErsaAerodrome(ErsaAerodrome) import Data.Aviation.Aip.Href(SetHref, FoldHref, ManyHref(_ManyHref), FoldHref(_FoldHref)) newtype ErsaAerodromes = ErsaAerodromes [ErsaAerodrome] deriving (Eq, Ord, Show) instance Semigroup ErsaAerodromes where ErsaAerodromes x <> ErsaAerodromes y = ErsaAerodromes (x <> y) instance Monoid ErsaAerodromes where mappend = (<>) mempty = ErsaAerodromes [] instance Wrapped ErsaAerodromes where type Unwrapped ErsaAerodromes = [ErsaAerodrome] _Wrapped' = iso (\(ErsaAerodromes x) -> x) ErsaAerodromes instance ErsaAerodromes ~ x => Rewrapped ErsaAerodromes x instance FromJSON ErsaAerodromes where parseJSON = withArray "ErsaAerodromes" $ \v -> ErsaAerodromes <$> traverse parseJSON (toList v) instance ToJSON ErsaAerodromes where toJSON (ErsaAerodromes x) = toJSON x instance Cons ErsaAerodromes ErsaAerodromes ErsaAerodrome ErsaAerodrome where _Cons = _Wrapped . _Cons . seconding (from _Wrapped) instance Snoc ErsaAerodromes ErsaAerodromes ErsaAerodrome ErsaAerodrome where _Snoc = _Wrapped . _Snoc . firsting (from _Wrapped) instance Each ErsaAerodromes ErsaAerodromes ErsaAerodrome ErsaAerodrome where each = _Wrapped . each instance Reversing ErsaAerodromes where reversing = _Wrapped %~ reversing instance Plated ErsaAerodromes where plate = _Wrapped . plate . from _Wrapped type instance IxValue ErsaAerodromes = ErsaAerodrome type instance Index ErsaAerodromes = Int instance Ixed ErsaAerodromes where ix i = _Wrapped . ix i class ManyErsaAerodromes a => AsErsaAerodromes a where _ErsaAerodromes :: Prism' a ErsaAerodromes default _ErsaAerodromes :: IsErsaAerodromes a => Prism' a ErsaAerodromes _ErsaAerodromes = _IsErsaAerodromes instance AsErsaAerodromes ErsaAerodromes where _ErsaAerodromes = id class FoldErsaAerodromes a where _FoldErsaAerodromes :: Fold a ErsaAerodromes instance FoldErsaAerodromes ErsaAerodromes where _FoldErsaAerodromes = id class FoldErsaAerodromes a => GetErsaAerodromes a where _GetErsaAerodromes :: Getter a ErsaAerodromes default _GetErsaAerodromes :: HasErsaAerodromes a => Getter a ErsaAerodromes _GetErsaAerodromes = ersaAerodromes instance GetErsaAerodromes ErsaAerodromes where _GetErsaAerodromes = id class SetErsaAerodromes a where _SetErsaAerodromes :: Setter' a ErsaAerodromes default _SetErsaAerodromes :: ManyErsaAerodromes a => Setter' a ErsaAerodromes _SetErsaAerodromes = _ManyErsaAerodromes instance SetErsaAerodromes ErsaAerodromes where _SetErsaAerodromes = id class (FoldErsaAerodromes a, SetErsaAerodromes a) => ManyErsaAerodromes a where _ManyErsaAerodromes :: Traversal' a ErsaAerodromes instance ManyErsaAerodromes ErsaAerodromes where _ManyErsaAerodromes = id class (GetErsaAerodromes a, ManyErsaAerodromes a) => HasErsaAerodromes a where ersaAerodromes :: Lens' a ErsaAerodromes default ersaAerodromes :: IsErsaAerodromes a => Lens' a ErsaAerodromes ersaAerodromes = _IsErsaAerodromes instance HasErsaAerodromes ErsaAerodromes where ersaAerodromes = id class (HasErsaAerodromes a, AsErsaAerodromes a) => IsErsaAerodromes a where _IsErsaAerodromes :: Iso' a ErsaAerodromes instance IsErsaAerodromes ErsaAerodromes where _IsErsaAerodromes = id instance SetErsaAerodromes () where instance FoldErsaAerodromes () where _FoldErsaAerodromes = _ManyErsaAerodromes instance ManyErsaAerodromes () where _ManyErsaAerodromes _ x = pure x ---- instance SetHref ErsaAerodromes where instance FoldHref ErsaAerodromes where _FoldHref = _ManyHref instance ManyHref ErsaAerodromes where _ManyHref = _Wrapped . traverse . _ManyHref