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

module Data.Aviation.Casr.Logbook.Types.Entries(
  Entries(..)
, emptyentries
, singleentry
) where

import Control.Lens(makeWrapped)
import Data.Aviation.Casr.Logbook.Types.Entry(Entry)
import Data.Eq(Eq)
import Data.Ord(Ord)
import Prelude(Show)

newtype Entries ae se ee be =
  Entries
    [Entry ae se ee be]
  deriving (Entries ae se ee be -> Entries ae se ee be -> Bool
(Entries ae se ee be -> Entries ae se ee be -> Bool)
-> (Entries ae se ee be -> Entries ae se ee be -> Bool)
-> Eq (Entries 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) =>
Entries ae se ee be -> Entries ae se ee be -> Bool
$c== :: forall ae se ee be.
(Eq ae, Eq se, Eq ee, Eq be) =>
Entries ae se ee be -> Entries ae se ee be -> Bool
== :: Entries ae se ee be -> Entries ae se ee be -> Bool
$c/= :: forall ae se ee be.
(Eq ae, Eq se, Eq ee, Eq be) =>
Entries ae se ee be -> Entries ae se ee be -> Bool
/= :: Entries ae se ee be -> Entries ae se ee be -> Bool
Eq, Eq (Entries ae se ee be)
Eq (Entries ae se ee be) =>
(Entries ae se ee be -> Entries ae se ee be -> Ordering)
-> (Entries ae se ee be -> Entries ae se ee be -> Bool)
-> (Entries ae se ee be -> Entries ae se ee be -> Bool)
-> (Entries ae se ee be -> Entries ae se ee be -> Bool)
-> (Entries ae se ee be -> Entries ae se ee be -> Bool)
-> (Entries ae se ee be
    -> Entries ae se ee be -> Entries ae se ee be)
-> (Entries ae se ee be
    -> Entries ae se ee be -> Entries ae se ee be)
-> Ord (Entries ae se ee be)
Entries ae se ee be -> Entries ae se ee be -> Bool
Entries ae se ee be -> Entries ae se ee be -> Ordering
Entries ae se ee be -> Entries ae se ee be -> Entries 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 (Entries ae se ee be)
forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entries ae se ee be -> Entries ae se ee be -> Bool
forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entries ae se ee be -> Entries ae se ee be -> Ordering
forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entries ae se ee be -> Entries ae se ee be -> Entries ae se ee be
$ccompare :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entries ae se ee be -> Entries ae se ee be -> Ordering
compare :: Entries ae se ee be -> Entries ae se ee be -> Ordering
$c< :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entries ae se ee be -> Entries ae se ee be -> Bool
< :: Entries ae se ee be -> Entries ae se ee be -> Bool
$c<= :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entries ae se ee be -> Entries ae se ee be -> Bool
<= :: Entries ae se ee be -> Entries ae se ee be -> Bool
$c> :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entries ae se ee be -> Entries ae se ee be -> Bool
> :: Entries ae se ee be -> Entries ae se ee be -> Bool
$c>= :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entries ae se ee be -> Entries ae se ee be -> Bool
>= :: Entries ae se ee be -> Entries ae se ee be -> Bool
$cmax :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entries ae se ee be -> Entries ae se ee be -> Entries ae se ee be
max :: Entries ae se ee be -> Entries ae se ee be -> Entries ae se ee be
$cmin :: forall ae se ee be.
(Ord ae, Ord se, Ord ee, Ord be) =>
Entries ae se ee be -> Entries ae se ee be -> Entries ae se ee be
min :: Entries ae se ee be -> Entries ae se ee be -> Entries ae se ee be
Ord, Int -> Entries ae se ee be -> ShowS
[Entries ae se ee be] -> ShowS
Entries ae se ee be -> String
(Int -> Entries ae se ee be -> ShowS)
-> (Entries ae se ee be -> String)
-> ([Entries ae se ee be] -> ShowS)
-> Show (Entries 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 -> Entries ae se ee be -> ShowS
forall ae se ee be.
(Show ae, Show se, Show ee, Show be) =>
[Entries ae se ee be] -> ShowS
forall ae se ee be.
(Show ae, Show se, Show ee, Show be) =>
Entries ae se ee be -> String
$cshowsPrec :: forall ae se ee be.
(Show ae, Show se, Show ee, Show be) =>
Int -> Entries ae se ee be -> ShowS
showsPrec :: Int -> Entries ae se ee be -> ShowS
$cshow :: forall ae se ee be.
(Show ae, Show se, Show ee, Show be) =>
Entries ae se ee be -> String
show :: Entries ae se ee be -> String
$cshowList :: forall ae se ee be.
(Show ae, Show se, Show ee, Show be) =>
[Entries ae se ee be] -> ShowS
showList :: [Entries ae se ee be] -> ShowS
Show)

makeWrapped ''Entries

emptyentries ::
  Entries ae se ee be
emptyentries :: forall ae se ee be. Entries ae se ee be
emptyentries =
  [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 []

singleentry ::
  Entry ae se ee be
  -> Entries ae se ee be
singleentry :: forall ae se ee be. Entry ae se ee be -> Entries ae se ee be
singleentry Entry ae se ee be
e =
  [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]