{-# OPTIONS_GHC -Wall #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FlexibleInstances #-} module Data.Aviation.Casr.Logbook.Types.Logbook( Logbook(..) , HasLogbook(..) , aviatorlogbook , emptylogbook , singleentrylogbook ) where import Control.Lens(makeClassy) import Data.Aviation.Casr.Logbook.Types.Aviator(Aviator) import Data.Aviation.Casr.Logbook.Types.Entries(Entries(Entries), emptyentries, singleentry) import Data.Aviation.Casr.Logbook.Types.Entry(Entry) import Data.Eq(Eq) import Data.Ord(Ord) import Prelude(Show) data Logbook ae se ee be = Logbook { forall ae se ee be. Logbook ae se ee be -> Aviator _logbookaviator :: Aviator , forall ae se ee be. Logbook ae se ee be -> Entries ae se ee be _logbookentries :: Entries ae se ee be } deriving (Logbook ae se ee be -> Logbook ae se ee be -> Bool (Logbook ae se ee be -> Logbook ae se ee be -> Bool) -> (Logbook ae se ee be -> Logbook ae se ee be -> Bool) -> Eq (Logbook 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) => Logbook ae se ee be -> Logbook ae se ee be -> Bool $c== :: forall ae se ee be. (Eq ae, Eq se, Eq ee, Eq be) => Logbook ae se ee be -> Logbook ae se ee be -> Bool == :: Logbook ae se ee be -> Logbook ae se ee be -> Bool $c/= :: forall ae se ee be. (Eq ae, Eq se, Eq ee, Eq be) => Logbook ae se ee be -> Logbook ae se ee be -> Bool /= :: Logbook ae se ee be -> Logbook ae se ee be -> Bool Eq, Eq (Logbook ae se ee be) Eq (Logbook ae se ee be) => (Logbook ae se ee be -> Logbook ae se ee be -> Ordering) -> (Logbook ae se ee be -> Logbook ae se ee be -> Bool) -> (Logbook ae se ee be -> Logbook ae se ee be -> Bool) -> (Logbook ae se ee be -> Logbook ae se ee be -> Bool) -> (Logbook ae se ee be -> Logbook ae se ee be -> Bool) -> (Logbook ae se ee be -> Logbook ae se ee be -> Logbook ae se ee be) -> (Logbook ae se ee be -> Logbook ae se ee be -> Logbook ae se ee be) -> Ord (Logbook ae se ee be) Logbook ae se ee be -> Logbook ae se ee be -> Bool Logbook ae se ee be -> Logbook ae se ee be -> Ordering Logbook ae se ee be -> Logbook ae se ee be -> Logbook 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 (Logbook ae se ee be) forall ae se ee be. (Ord ae, Ord se, Ord ee, Ord be) => Logbook ae se ee be -> Logbook ae se ee be -> Bool forall ae se ee be. (Ord ae, Ord se, Ord ee, Ord be) => Logbook ae se ee be -> Logbook ae se ee be -> Ordering forall ae se ee be. (Ord ae, Ord se, Ord ee, Ord be) => Logbook ae se ee be -> Logbook ae se ee be -> Logbook ae se ee be $ccompare :: forall ae se ee be. (Ord ae, Ord se, Ord ee, Ord be) => Logbook ae se ee be -> Logbook ae se ee be -> Ordering compare :: Logbook ae se ee be -> Logbook ae se ee be -> Ordering $c< :: forall ae se ee be. (Ord ae, Ord se, Ord ee, Ord be) => Logbook ae se ee be -> Logbook ae se ee be -> Bool < :: Logbook ae se ee be -> Logbook ae se ee be -> Bool $c<= :: forall ae se ee be. (Ord ae, Ord se, Ord ee, Ord be) => Logbook ae se ee be -> Logbook ae se ee be -> Bool <= :: Logbook ae se ee be -> Logbook ae se ee be -> Bool $c> :: forall ae se ee be. (Ord ae, Ord se, Ord ee, Ord be) => Logbook ae se ee be -> Logbook ae se ee be -> Bool > :: Logbook ae se ee be -> Logbook ae se ee be -> Bool $c>= :: forall ae se ee be. (Ord ae, Ord se, Ord ee, Ord be) => Logbook ae se ee be -> Logbook ae se ee be -> Bool >= :: Logbook ae se ee be -> Logbook ae se ee be -> Bool $cmax :: forall ae se ee be. (Ord ae, Ord se, Ord ee, Ord be) => Logbook ae se ee be -> Logbook ae se ee be -> Logbook ae se ee be max :: Logbook ae se ee be -> Logbook ae se ee be -> Logbook ae se ee be $cmin :: forall ae se ee be. (Ord ae, Ord se, Ord ee, Ord be) => Logbook ae se ee be -> Logbook ae se ee be -> Logbook ae se ee be min :: Logbook ae se ee be -> Logbook ae se ee be -> Logbook ae se ee be Ord, Int -> Logbook ae se ee be -> ShowS [Logbook ae se ee be] -> ShowS Logbook ae se ee be -> String (Int -> Logbook ae se ee be -> ShowS) -> (Logbook ae se ee be -> String) -> ([Logbook ae se ee be] -> ShowS) -> Show (Logbook 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 -> Logbook ae se ee be -> ShowS forall ae se ee be. (Show ae, Show se, Show ee, Show be) => [Logbook ae se ee be] -> ShowS forall ae se ee be. (Show ae, Show se, Show ee, Show be) => Logbook ae se ee be -> String $cshowsPrec :: forall ae se ee be. (Show ae, Show se, Show ee, Show be) => Int -> Logbook ae se ee be -> ShowS showsPrec :: Int -> Logbook ae se ee be -> ShowS $cshow :: forall ae se ee be. (Show ae, Show se, Show ee, Show be) => Logbook ae se ee be -> String show :: Logbook ae se ee be -> String $cshowList :: forall ae se ee be. (Show ae, Show se, Show ee, Show be) => [Logbook ae se ee be] -> ShowS showList :: [Logbook ae se ee be] -> ShowS Show) makeClassy ''Logbook aviatorlogbook :: Aviator -> [Entry ae se ee be] -> Logbook ae se ee be aviatorlogbook :: forall ae se ee be. Aviator -> [Entry ae se ee be] -> Logbook ae se ee be aviatorlogbook Aviator a [Entry ae se ee be] e = Aviator -> Entries ae se ee be -> Logbook ae se ee be forall ae se ee be. Aviator -> Entries ae se ee be -> Logbook ae se ee be Logbook Aviator a ([Entry ae se ee be] -> Entries ae se ee be forall ae se ee be. [Entry ae se ee be] -> Entries ae se ee be Entries [Entry ae se ee be] e) emptylogbook :: Aviator -> Logbook ae se ee be emptylogbook :: forall ae se ee be. Aviator -> Logbook ae se ee be emptylogbook Aviator a = Aviator -> Entries ae se ee be -> Logbook ae se ee be forall ae se ee be. Aviator -> Entries ae se ee be -> Logbook ae se ee be Logbook Aviator a Entries ae se ee be forall ae se ee be. Entries ae se ee be emptyentries singleentrylogbook :: Aviator -> Entry ae se ee be -> Logbook ae se ee be singleentrylogbook :: forall ae se ee be. Aviator -> Entry ae se ee be -> Logbook ae se ee be singleentrylogbook Aviator a Entry ae se ee be e = Aviator -> Entries ae se ee be -> Logbook ae se ee be forall ae se ee be. Aviator -> Entries ae se ee be -> Logbook ae se ee be Logbook Aviator a (Entry ae se ee be -> Entries ae se ee be forall ae se ee be. Entry ae se ee be -> Entries ae se ee be singleentry Entry ae se ee be e)