{-# OPTIONS_GHC -Wall #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleInstances #-} module Data.Aviation.Casr.Logbook.Meta.ExamMeta( ExamMeta(ExamMeta) , HasExamMeta(..) ) where import Control.Lens(makeClassy, makeWrapped) import Data.Aviation.Casr.Logbook.Meta.ExamExpense ( ExamExpense ) import Data.Eq(Eq) import Data.Monoid ( (<>), Monoid(mempty) ) import Data.Ord(Ord) import Data.Semigroup ( Semigroup ) import Prelude(Show) newtype ExamMeta = ExamMeta [ExamExpense] deriving (ExamMeta -> ExamMeta -> Bool (ExamMeta -> ExamMeta -> Bool) -> (ExamMeta -> ExamMeta -> Bool) -> Eq ExamMeta forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ExamMeta -> ExamMeta -> Bool == :: ExamMeta -> ExamMeta -> Bool $c/= :: ExamMeta -> ExamMeta -> Bool /= :: ExamMeta -> ExamMeta -> Bool Eq, Eq ExamMeta Eq ExamMeta => (ExamMeta -> ExamMeta -> Ordering) -> (ExamMeta -> ExamMeta -> Bool) -> (ExamMeta -> ExamMeta -> Bool) -> (ExamMeta -> ExamMeta -> Bool) -> (ExamMeta -> ExamMeta -> Bool) -> (ExamMeta -> ExamMeta -> ExamMeta) -> (ExamMeta -> ExamMeta -> ExamMeta) -> Ord ExamMeta ExamMeta -> ExamMeta -> Bool ExamMeta -> ExamMeta -> Ordering ExamMeta -> ExamMeta -> ExamMeta 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 :: ExamMeta -> ExamMeta -> Ordering compare :: ExamMeta -> ExamMeta -> Ordering $c< :: ExamMeta -> ExamMeta -> Bool < :: ExamMeta -> ExamMeta -> Bool $c<= :: ExamMeta -> ExamMeta -> Bool <= :: ExamMeta -> ExamMeta -> Bool $c> :: ExamMeta -> ExamMeta -> Bool > :: ExamMeta -> ExamMeta -> Bool $c>= :: ExamMeta -> ExamMeta -> Bool >= :: ExamMeta -> ExamMeta -> Bool $cmax :: ExamMeta -> ExamMeta -> ExamMeta max :: ExamMeta -> ExamMeta -> ExamMeta $cmin :: ExamMeta -> ExamMeta -> ExamMeta min :: ExamMeta -> ExamMeta -> ExamMeta Ord, Int -> ExamMeta -> ShowS [ExamMeta] -> ShowS ExamMeta -> String (Int -> ExamMeta -> ShowS) -> (ExamMeta -> String) -> ([ExamMeta] -> ShowS) -> Show ExamMeta forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> ExamMeta -> ShowS showsPrec :: Int -> ExamMeta -> ShowS $cshow :: ExamMeta -> String show :: ExamMeta -> String $cshowList :: [ExamMeta] -> ShowS showList :: [ExamMeta] -> ShowS Show) makeClassy ''ExamMeta makeWrapped ''ExamMeta instance Semigroup ExamMeta where ExamMeta [ExamExpense] x <> :: ExamMeta -> ExamMeta -> ExamMeta <> ExamMeta [ExamExpense] y = [ExamExpense] -> ExamMeta ExamMeta ([ExamExpense] x [ExamExpense] -> [ExamExpense] -> [ExamExpense] forall a. Semigroup a => a -> a -> a <> [ExamExpense] y) instance Monoid ExamMeta where mempty :: ExamMeta mempty = [ExamExpense] -> ExamMeta ExamMeta [ExamExpense] forall a. Monoid a => a mempty