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

module Data.Aviation.Casr.Logbook.Types.Aircraft(
  Aircraft(..)
, HasAircraft(..)
, singleaircraft
, multiaircraft
) where

import Control.Lens(makeClassy)
import Data.Aviation.Casr.Logbook.Types.Engine(Engine(Single, Multi))
import Data.Eq(Eq)
import Data.Ord(Ord)
import Data.String(String)
import Prelude(Show)

data Aircraft =
  Aircraft {
    Aircraft -> String
_aircraftType :: String
  , Aircraft -> String
_aircraftRegistration :: String
  , Aircraft -> Engine
_aircraftEngine :: Engine
  } deriving (Aircraft -> Aircraft -> Bool
(Aircraft -> Aircraft -> Bool)
-> (Aircraft -> Aircraft -> Bool) -> Eq Aircraft
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Aircraft -> Aircraft -> Bool
== :: Aircraft -> Aircraft -> Bool
$c/= :: Aircraft -> Aircraft -> Bool
/= :: Aircraft -> Aircraft -> Bool
Eq, Eq Aircraft
Eq Aircraft =>
(Aircraft -> Aircraft -> Ordering)
-> (Aircraft -> Aircraft -> Bool)
-> (Aircraft -> Aircraft -> Bool)
-> (Aircraft -> Aircraft -> Bool)
-> (Aircraft -> Aircraft -> Bool)
-> (Aircraft -> Aircraft -> Aircraft)
-> (Aircraft -> Aircraft -> Aircraft)
-> Ord Aircraft
Aircraft -> Aircraft -> Bool
Aircraft -> Aircraft -> Ordering
Aircraft -> Aircraft -> Aircraft
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 :: Aircraft -> Aircraft -> Ordering
compare :: Aircraft -> Aircraft -> Ordering
$c< :: Aircraft -> Aircraft -> Bool
< :: Aircraft -> Aircraft -> Bool
$c<= :: Aircraft -> Aircraft -> Bool
<= :: Aircraft -> Aircraft -> Bool
$c> :: Aircraft -> Aircraft -> Bool
> :: Aircraft -> Aircraft -> Bool
$c>= :: Aircraft -> Aircraft -> Bool
>= :: Aircraft -> Aircraft -> Bool
$cmax :: Aircraft -> Aircraft -> Aircraft
max :: Aircraft -> Aircraft -> Aircraft
$cmin :: Aircraft -> Aircraft -> Aircraft
min :: Aircraft -> Aircraft -> Aircraft
Ord, Int -> Aircraft -> ShowS
[Aircraft] -> ShowS
Aircraft -> String
(Int -> Aircraft -> ShowS)
-> (Aircraft -> String) -> ([Aircraft] -> ShowS) -> Show Aircraft
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Aircraft -> ShowS
showsPrec :: Int -> Aircraft -> ShowS
$cshow :: Aircraft -> String
show :: Aircraft -> String
$cshowList :: [Aircraft] -> ShowS
showList :: [Aircraft] -> ShowS
Show)

makeClassy ''Aircraft

singleaircraft ::
  String
  -> String
  -> Aircraft
singleaircraft :: String -> String -> Aircraft
singleaircraft String
t String
r =
  String -> String -> Engine -> Aircraft
Aircraft
    String
t
    String
r
    Engine
Single

multiaircraft ::
  String
  -> String
  -> Aircraft
multiaircraft :: String -> String -> Aircraft
multiaircraft String
t String
r =
  String -> String -> Engine -> Aircraft
Aircraft
    String
t
    String
r
    Engine
Multi