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

module Data.Aviation.Casr.Logbook.Types.Aviator(
  Aviator(..)
, HasAviator(..)
, aviatorwithname
, nodobaviator
, dobaviator
, dob'
) where

import Control.Category ( Category((.)) )
import Control.Lens(makeClassy, Traversal', _Just)
import Data.Aviation.Casr.Logbook.Types.Rating(Rating)
import Data.Eq(Eq)
import Data.Ord(Ord)
import Data.Digit(DecDigit)
import Data.Maybe(Maybe(Nothing, Just))
import Data.String(String)
import Data.Time(Day)
import Prelude(Show)

data Aviator =
  Aviator {
    Aviator -> String
_surname :: String
  , Aviator -> String
_firstname :: String
  , Aviator -> [DecDigit]
_arn :: [DecDigit]
  , Aviator -> Maybe Day
_dob :: Maybe Day
  , Aviator -> [Rating]
_ratings :: [Rating]
  } deriving (Aviator -> Aviator -> Bool
(Aviator -> Aviator -> Bool)
-> (Aviator -> Aviator -> Bool) -> Eq Aviator
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Aviator -> Aviator -> Bool
== :: Aviator -> Aviator -> Bool
$c/= :: Aviator -> Aviator -> Bool
/= :: Aviator -> Aviator -> Bool
Eq, Eq Aviator
Eq Aviator =>
(Aviator -> Aviator -> Ordering)
-> (Aviator -> Aviator -> Bool)
-> (Aviator -> Aviator -> Bool)
-> (Aviator -> Aviator -> Bool)
-> (Aviator -> Aviator -> Bool)
-> (Aviator -> Aviator -> Aviator)
-> (Aviator -> Aviator -> Aviator)
-> Ord Aviator
Aviator -> Aviator -> Bool
Aviator -> Aviator -> Ordering
Aviator -> Aviator -> Aviator
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 :: Aviator -> Aviator -> Ordering
compare :: Aviator -> Aviator -> Ordering
$c< :: Aviator -> Aviator -> Bool
< :: Aviator -> Aviator -> Bool
$c<= :: Aviator -> Aviator -> Bool
<= :: Aviator -> Aviator -> Bool
$c> :: Aviator -> Aviator -> Bool
> :: Aviator -> Aviator -> Bool
$c>= :: Aviator -> Aviator -> Bool
>= :: Aviator -> Aviator -> Bool
$cmax :: Aviator -> Aviator -> Aviator
max :: Aviator -> Aviator -> Aviator
$cmin :: Aviator -> Aviator -> Aviator
min :: Aviator -> Aviator -> Aviator
Ord, Int -> Aviator -> ShowS
[Aviator] -> ShowS
Aviator -> String
(Int -> Aviator -> ShowS)
-> (Aviator -> String) -> ([Aviator] -> ShowS) -> Show Aviator
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Aviator -> ShowS
showsPrec :: Int -> Aviator -> ShowS
$cshow :: Aviator -> String
show :: Aviator -> String
$cshowList :: [Aviator] -> ShowS
showList :: [Aviator] -> ShowS
Show)

makeClassy ''Aviator

dob' ::
  HasAviator c =>
  Traversal' c Day
dob' :: forall c. HasAviator c => Traversal' c Day
dob' =
  (Maybe Day -> f (Maybe Day)) -> c -> f c
forall c. HasAviator c => Lens' c (Maybe Day)
Lens' c (Maybe Day)
dob ((Maybe Day -> f (Maybe Day)) -> c -> f c)
-> ((Day -> f Day) -> Maybe Day -> f (Maybe Day))
-> (Day -> f Day)
-> c
-> f c
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (Day -> f Day) -> Maybe Day -> f (Maybe Day)
forall a b (p :: * -> * -> *) (f :: * -> *).
(Choice p, Applicative f) =>
p a (f b) -> p (Maybe a) (f (Maybe b))
_Just

aviatorwithname ::
  String
  -> String
  -> Aviator
aviatorwithname :: String -> String -> Aviator
aviatorwithname String
s String
f =
  String -> String -> [DecDigit] -> Maybe Day -> [Rating] -> Aviator
Aviator
    String
s
    String
f
    []
    Maybe Day
forall a. Maybe a
Nothing
    []

nodobaviator ::
  String
  -> String
  -> [DecDigit]
  -> [Rating]
  -> Aviator
nodobaviator :: String -> String -> [DecDigit] -> [Rating] -> Aviator
nodobaviator String
s String
f [DecDigit]
r =
  String -> String -> [DecDigit] -> Maybe Day -> [Rating] -> Aviator
Aviator
    String
s
    String
f
    [DecDigit]
r
    Maybe Day
forall a. Maybe a
Nothing

dobaviator ::
  String
  -> String
  -> [DecDigit]
  -> Day
  -> [Rating]
  -> Aviator
dobaviator :: String -> String -> [DecDigit] -> Day -> [Rating] -> Aviator
dobaviator String
s String
f [DecDigit]
r Day
b =
  String -> String -> [DecDigit] -> Maybe Day -> [Rating] -> Aviator
Aviator
    String
s
    String
f
    [DecDigit]
r
    (Day -> Maybe Day
forall a. a -> Maybe a
Just Day
b)