{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}

module Data.Aviation.Casr.Logbook.Types.Briefing(
  Briefing(..)
, HasBriefing(..)
) where

import Control.Category((.))
import Control.Lens(makeClassy)
import Data.Aviation.Casr.Logbook.Types.Aviator(Aviator, HasAviator(aviator))
import Data.Aviation.Casr.Logbook.Types.Location(Location, HasLocation(location))
import Data.Aviation.Casr.Logbook.Types.Time(Time, HasTime(time))
import Data.Aviation.Casr.Logbook.Types.TimeAmount(TimeAmount, HasTimeAmount(timeAmount))
import Data.Eq(Eq)
import Data.Ord(Ord)
import Data.String(String)
import Prelude(Show)

data Briefing =
  Briefing {
    Briefing -> String
_briefingName :: String
  , Briefing -> Location
_briefingLocation :: Location
  , Briefing -> Time
_briefingTime :: Time
  , Briefing -> Aviator
_briefer :: Aviator
  , Briefing -> TimeAmount
_briefingTimeAmount :: TimeAmount
  } deriving (Briefing -> Briefing -> Bool
(Briefing -> Briefing -> Bool)
-> (Briefing -> Briefing -> Bool) -> Eq Briefing
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Briefing -> Briefing -> Bool
== :: Briefing -> Briefing -> Bool
$c/= :: Briefing -> Briefing -> Bool
/= :: Briefing -> Briefing -> Bool
Eq, Eq Briefing
Eq Briefing =>
(Briefing -> Briefing -> Ordering)
-> (Briefing -> Briefing -> Bool)
-> (Briefing -> Briefing -> Bool)
-> (Briefing -> Briefing -> Bool)
-> (Briefing -> Briefing -> Bool)
-> (Briefing -> Briefing -> Briefing)
-> (Briefing -> Briefing -> Briefing)
-> Ord Briefing
Briefing -> Briefing -> Bool
Briefing -> Briefing -> Ordering
Briefing -> Briefing -> Briefing
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Briefing -> Briefing -> Ordering
compare :: Briefing -> Briefing -> Ordering
$c< :: Briefing -> Briefing -> Bool
< :: Briefing -> Briefing -> Bool
$c<= :: Briefing -> Briefing -> Bool
<= :: Briefing -> Briefing -> Bool
$c> :: Briefing -> Briefing -> Bool
> :: Briefing -> Briefing -> Bool
$c>= :: Briefing -> Briefing -> Bool
>= :: Briefing -> Briefing -> Bool
$cmax :: Briefing -> Briefing -> Briefing
max :: Briefing -> Briefing -> Briefing
$cmin :: Briefing -> Briefing -> Briefing
min :: Briefing -> Briefing -> Briefing
Ord, Int -> Briefing -> ShowS
[Briefing] -> ShowS
Briefing -> String
(Int -> Briefing -> ShowS)
-> (Briefing -> String) -> ([Briefing] -> ShowS) -> Show Briefing
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Briefing -> ShowS
showsPrec :: Int -> Briefing -> ShowS
$cshow :: Briefing -> String
show :: Briefing -> String
$cshowList :: [Briefing] -> ShowS
showList :: [Briefing] -> ShowS
Show)

makeClassy ''Briefing

instance HasLocation Briefing where
  location :: Lens' Briefing Location
location =
    (Location -> f Location) -> Briefing -> f Briefing
forall c. HasBriefing c => Lens' c Location
Lens' Briefing Location
briefingLocation ((Location -> f Location) -> Briefing -> f Briefing)
-> ((Location -> f Location) -> Location -> f Location)
-> (Location -> f Location)
-> Briefing
-> f Briefing
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (Location -> f Location) -> Location -> f Location
forall c. HasLocation c => Lens' c Location
Lens' Location Location
location

instance HasTime Briefing where
  time :: Lens' Briefing Time
time =
    (Time -> f Time) -> Briefing -> f Briefing
forall c. HasBriefing c => Lens' c Time
Lens' Briefing Time
briefingTime ((Time -> f Time) -> Briefing -> f Briefing)
-> ((Time -> f Time) -> Time -> f Time)
-> (Time -> f Time)
-> Briefing
-> f Briefing
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.  (Time -> f Time) -> Time -> f Time
forall c. HasTime c => Lens' c Time
Lens' Time Time
time

instance HasAviator Briefing where
  aviator :: Lens' Briefing Aviator
aviator =
    (Aviator -> f Aviator) -> Briefing -> f Briefing
forall c. HasBriefing c => Lens' c Aviator
Lens' Briefing Aviator
briefer ((Aviator -> f Aviator) -> Briefing -> f Briefing)
-> ((Aviator -> f Aviator) -> Aviator -> f Aviator)
-> (Aviator -> f Aviator)
-> Briefing
-> f Briefing
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (Aviator -> f Aviator) -> Aviator -> f Aviator
forall c. HasAviator c => Lens' c Aviator
Lens' Aviator Aviator
aviator

instance HasTimeAmount Briefing where
  timeAmount :: Lens' Briefing TimeAmount
timeAmount =
    (TimeAmount -> f TimeAmount) -> Briefing -> f Briefing
forall c. HasBriefing c => Lens' c TimeAmount
Lens' Briefing TimeAmount
briefingTimeAmount ((TimeAmount -> f TimeAmount) -> Briefing -> f Briefing)
-> ((TimeAmount -> f TimeAmount) -> TimeAmount -> f TimeAmount)
-> (TimeAmount -> f TimeAmount)
-> Briefing
-> f Briefing
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (TimeAmount -> f TimeAmount) -> TimeAmount -> f TimeAmount
forall c. HasTimeAmount c => Lens' c TimeAmount
Lens' TimeAmount TimeAmount
timeAmount