aip-0.1.0: src/Data/Aviation/Aip/Title.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE DefaultSignatures #-}
module Data.Aviation.Aip.Title(
Title(..)
, AsTitle(..)
, FoldTitle(..)
, GetTitle(..)
, SetTitle(..)
, ManyTitle(..)
, HasTitle(..)
, IsTitle(..)
) where
import Control.Category((.), id)
import Control.Applicative(pure)
import Control.Lens
import Data.Aeson(FromJSON(parseJSON), ToJSON(toJSON))
import Data.Char(Char)
import Data.Eq(Eq)
import Data.Functor((<$>))
import Data.Int(Int)
import Data.Monoid(Monoid(mappend, mempty))
import Data.Ord(Ord)
import Data.Semigroup(Semigroup((<>)))
import Data.String(String)
import Prelude(Show)
newtype Title =
Title
String
deriving (Eq, Ord, Show)
instance FromJSON Title where
parseJSON v =
Title <$> parseJSON v
instance ToJSON Title where
toJSON (Title x) =
toJSON x
instance Semigroup Title where
Title x <> Title y =
Title (x <> y)
instance Monoid Title where
mappend =
(<>)
mempty =
Title mempty
instance Cons Title Title Char Char where
_Cons =
_Wrapped . _Cons . seconding (from _Wrapped)
instance Snoc Title Title Char Char where
_Snoc =
_Wrapped . _Snoc . firsting (from _Wrapped)
instance Each Title Title Char Char where
each =
_Wrapped . each
instance Reversing Title where
reversing =
_Wrapped %~ reversing
instance Plated Title where
plate =
_Wrapped . plate . from _Wrapped
type instance IxValue Title = Char
type instance Index Title = Int
instance Ixed Title where
ix i =
_Wrapped . ix i
instance Wrapped Title where
type Unwrapped Title = String
_Wrapped' =
iso
(\(Title x) -> x)
Title
instance Title ~ a =>
Rewrapped Title a
class ManyTitle a => AsTitle a where
_Title ::
Prism' a Title
default _Title ::
IsTitle a =>
Prism' a Title
_Title =
_IsTitle
instance AsTitle Title where
_Title =
id
instance AsTitle String where
_Title =
from _Wrapped
class FoldTitle a where
_FoldTitle ::
Fold a Title
instance FoldTitle Title where
_FoldTitle =
id
instance FoldTitle String where
_FoldTitle =
from _Wrapped
class FoldTitle a => GetTitle a where
_GetTitle ::
Getter a Title
default _GetTitle ::
HasTitle a =>
Getter a Title
_GetTitle =
title
instance GetTitle Title where
_GetTitle =
id
instance GetTitle String where
_GetTitle =
from _Wrapped
class SetTitle a where
_SetTitle ::
Setter' a Title
default _SetTitle ::
ManyTitle a =>
Setter' a Title
_SetTitle =
_ManyTitle
instance SetTitle Title where
_SetTitle =
id
instance SetTitle String where
_SetTitle =
from _Wrapped
class (FoldTitle a, SetTitle a) => ManyTitle a where
_ManyTitle ::
Traversal' a Title
instance ManyTitle Title where
_ManyTitle =
id
instance ManyTitle String where
_ManyTitle =
from _Wrapped
class (GetTitle a, ManyTitle a) => HasTitle a where
title ::
Lens' a Title
default title ::
IsTitle a =>
Lens' a Title
title =
_IsTitle
instance HasTitle Title where
title =
id
instance HasTitle String where
title =
from _Wrapped
class (HasTitle a, AsTitle a) => IsTitle a where
_IsTitle ::
Iso' a Title
instance IsTitle Title where
_IsTitle =
id
instance IsTitle String where
_IsTitle =
from _Wrapped
instance SetTitle () where
instance FoldTitle () where
_FoldTitle =
_ManyTitle
instance ManyTitle () where
_ManyTitle _ x =
pure x