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

module Data.Aviation.Casr.Logbook.Types.Entry(
  Entry(..)
, AsEntry(..)
) where

import Control.Lens(makeClassyPrisms)
import Data.Aviation.Casr.Logbook.Types.AircraftFlight(AircraftFlight)
import Data.Aviation.Casr.Logbook.Types.SimulatorFlight(SimulatorFlight)
import Data.Aviation.Casr.Logbook.Types.Exam(Exam)
import Data.Aviation.Casr.Logbook.Types.Briefing(Briefing)
import Data.Eq(Eq)
import Data.Ord(Ord)
import Prelude(Show)

data Entry ae se ee be =
  AircraftFlightEntry AircraftFlight ae
  | SimulatorFlightEntry SimulatorFlight se
  | ExamEntry Exam ee
  | BriefingEntry Briefing be
  deriving (Entry ae se ee be -> Entry ae se ee be -> Bool
(Entry ae se ee be -> Entry ae se ee be -> Bool)
-> (Entry ae se ee be -> Entry ae se ee be -> Bool)
-> Eq (Entry ae se ee be)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall ae se ee be.
(Eq ae, Eq se, Eq ee, Eq be) =>
Entry ae se ee be -> Entry ae se ee be -> Bool
$c== :: forall ae se ee be.
(Eq ae, Eq se, Eq ee, Eq be) =>
Entry ae se ee be -> Entry ae se ee be -> Bool
== :: Entry ae se ee be -> Entry ae se ee be -> Bool
$c/= :: forall ae se ee be.
(Eq ae, Eq se, Eq ee, Eq be) =>
Entry ae se ee be -> Entry ae se ee be -> Bool
/= :: Entry ae se ee be -> Entry ae se ee be -> Bool
Eq, Eq (Entry ae se ee be)
Eq (Entry ae se ee be) =>
(Entry ae se ee be -> Entry ae se ee be -> Ordering)
-> (Entry ae se ee be -> Entry ae se ee be -> Bool)
-> (Entry ae se ee be -> Entry ae se ee be -> Bool)
-> (Entry ae se ee be -> Entry ae se ee be -> Bool)
-> (Entry ae se ee be -> Entry ae se ee be -> Bool)
-> (Entry ae se ee be -> Entry ae se ee be -> Entry ae se ee be)
-> (Entry ae se ee be -> Entry ae se ee be -> Entry ae se ee be)
-> Ord (Entry ae se ee be)
Entry ae se ee be -> Entry ae se ee be -> Bool
Entry ae se ee be -> Entry ae se ee be -> Ordering
Entry ae se ee be -> Entry ae se ee be -> Entry ae se ee be
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
forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Eq (Entry ae se ee be)
forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entry ae se ee be -> Entry ae se ee be -> Bool
forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entry ae se ee be -> Entry ae se ee be -> Ordering
forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entry ae se ee be -> Entry ae se ee be -> Entry ae se ee be
$ccompare :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entry ae se ee be -> Entry ae se ee be -> Ordering
compare :: Entry ae se ee be -> Entry ae se ee be -> Ordering
$c< :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entry ae se ee be -> Entry ae se ee be -> Bool
< :: Entry ae se ee be -> Entry ae se ee be -> Bool
$c<= :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entry ae se ee be -> Entry ae se ee be -> Bool
<= :: Entry ae se ee be -> Entry ae se ee be -> Bool
$c> :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entry ae se ee be -> Entry ae se ee be -> Bool
> :: Entry ae se ee be -> Entry ae se ee be -> Bool
$c>= :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entry ae se ee be -> Entry ae se ee be -> Bool
>= :: Entry ae se ee be -> Entry ae se ee be -> Bool
$cmax :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entry ae se ee be -> Entry ae se ee be -> Entry ae se ee be
max :: Entry ae se ee be -> Entry ae se ee be -> Entry ae se ee be
$cmin :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entry ae se ee be -> Entry ae se ee be -> Entry ae se ee be
min :: Entry ae se ee be -> Entry ae se ee be -> Entry ae se ee be
Ord, Int -> Entry ae se ee be -> ShowS
[Entry ae se ee be] -> ShowS
Entry ae se ee be -> String
(Int -> Entry ae se ee be -> ShowS)
-> (Entry ae se ee be -> String)
-> ([Entry ae se ee be] -> ShowS)
-> Show (Entry ae se ee be)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall ae se ee be.
(Show ae, Show se, Show ee, Show be) =>
Int -> Entry ae se ee be -> ShowS
forall ae se ee be.
(Show ae, Show se, Show ee, Show be) =>
[Entry ae se ee be] -> ShowS
forall ae se ee be.
(Show ae, Show se, Show ee, Show be) =>
Entry ae se ee be -> String
$cshowsPrec :: forall ae se ee be.
(Show ae, Show se, Show ee, Show be) =>
Int -> Entry ae se ee be -> ShowS
showsPrec :: Int -> Entry ae se ee be -> ShowS
$cshow :: forall ae se ee be.
(Show ae, Show se, Show ee, Show be) =>
Entry ae se ee be -> String
show :: Entry ae se ee be -> String
$cshowList :: forall ae se ee be.
(Show ae, Show se, Show ee, Show be) =>
[Entry ae se ee be] -> ShowS
showList :: [Entry ae se ee be] -> ShowS
Show)

makeClassyPrisms ''Entry