{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} module Data.Aviation.Casr.Logbook.Types.AircraftFlight( AircraftFlight(..) , HasAircraftFlight(..) , icusonlyflight , noif_icusonlyflight , dualonlyflight , noif_dualonlyflight , commandonlyflight , noif_commandonlyflight ) where import Control.Category((.)) import Control.Lens(makeClassy) import Data.Aviation.Casr.Logbook.Types.Aircraft(Aircraft, HasAircraft(aircraft)) import Data.Aviation.Casr.Logbook.Types.Command(Command(ICUS, Dual, InCommand)) import Data.Aviation.Casr.Logbook.Types.DayNight(DayNight, HasDayNight(dayNight)) import Data.Aviation.Casr.Logbook.Types.FlightPath(FlightPath, HasFlightPath(flightPath)) import Data.Aviation.Casr.Logbook.Types.Aviator(Aviator) import Data.Aviation.Casr.Logbook.Types.TimeAmount(TimeAmount, zerotimeamount) import Data.Eq(Eq) import Data.Ord(Ord) import Data.String(String) import Prelude(Show) data AircraftFlight = AircraftFlight { _aircraftflightname :: String , _flightaircraft :: Aircraft , _command :: Command , _daynight :: DayNight , _flightpath :: FlightPath , _flightothercrew :: [Aviator] , _instrumentflightTime :: TimeAmount } deriving (Eq, Ord, Show) makeClassy ''AircraftFlight instance HasAircraft AircraftFlight where aircraft = flightaircraft . aircraft instance HasDayNight AircraftFlight where dayNight = daynight . dayNight instance HasFlightPath AircraftFlight where flightPath = flightpath . flightPath icusonlyflight :: String -> Aircraft -> Aviator -> DayNight -> FlightPath -> TimeAmount -> AircraftFlight icusonlyflight n a v t p i = AircraftFlight n a (ICUS v) t p [] i noif_icusonlyflight :: String -> Aircraft -> Aviator -> DayNight -> FlightPath -> AircraftFlight noif_icusonlyflight n a v t p = icusonlyflight n a v t p zerotimeamount dualonlyflight :: String -> Aircraft -> Aviator -> DayNight -> FlightPath -> TimeAmount -> AircraftFlight dualonlyflight n a v t p i = AircraftFlight n a (Dual v) t p [] i noif_dualonlyflight :: String -> Aircraft -> Aviator -> DayNight -> FlightPath -> AircraftFlight noif_dualonlyflight n a v t p = dualonlyflight n a v t p zerotimeamount commandonlyflight :: String -> Aircraft -> DayNight -> FlightPath -> TimeAmount -> AircraftFlight commandonlyflight n a t p i = AircraftFlight n a InCommand t p [] i noif_commandonlyflight :: String -> Aircraft -> DayNight -> FlightPath -> AircraftFlight noif_commandonlyflight n a t p = commandonlyflight n a t p zerotimeamount