casr-logbook-types (empty) → 0.0.1
raw patch · 24 files changed
+1077/−0 lines, 24 filesdep +QuickCheckdep +basedep +containersbuild-type:Customsetup-changed
Dependencies added: QuickCheck, base, containers, digit, directory, doctest, filepath, lens, template-haskell, time
Files
- LICENSE +27/−0
- Setup.lhs +44/−0
- casr-logbook-types.cabal +94/−0
- changelog +5/−0
- src/Data/Aviation/Casr/Logbook/Types.hs +22/−0
- src/Data/Aviation/Casr/Logbook/Types/Aircraft.hs +45/−0
- src/Data/Aviation/Casr/Logbook/Types/AircraftFlight.hs +137/−0
- src/Data/Aviation/Casr/Logbook/Types/Aviator.hs +70/−0
- src/Data/Aviation/Casr/Logbook/Types/Briefing.hs +28/−0
- src/Data/Aviation/Casr/Logbook/Types/Command.hs +33/−0
- src/Data/Aviation/Casr/Logbook/Types/DayNight.hs +47/−0
- src/Data/Aviation/Casr/Logbook/Types/Engine.hs +19/−0
- src/Data/Aviation/Casr/Logbook/Types/Entries.hs +35/−0
- src/Data/Aviation/Casr/Logbook/Types/Entry.hs +28/−0
- src/Data/Aviation/Casr/Logbook/Types/Exam.hs +45/−0
- src/Data/Aviation/Casr/Logbook/Types/FlightPath.hs +61/−0
- src/Data/Aviation/Casr/Logbook/Types/FlightPoint.hs +48/−0
- src/Data/Aviation/Casr/Logbook/Types/Location.hs +22/−0
- src/Data/Aviation/Casr/Logbook/Types/Logbook.hs +54/−0
- src/Data/Aviation/Casr/Logbook/Types/Rating.hs +42/−0
- src/Data/Aviation/Casr/Logbook/Types/SimulatorFlight.hs +44/−0
- src/Data/Aviation/Casr/Logbook/Types/Time.hs +37/−0
- src/Data/Aviation/Casr/Logbook/Types/TimeAmount.hs +58/−0
- test/doctests.hs +32/−0
+ LICENSE view
@@ -0,0 +1,27 @@+Copyright 2016 Tony Morris+All rights reserved.++Redistribution and use in source and binary forms, with or without modification,+are permitted provided that the following conditions are met:++1. Redistributions of source code must retain the above copyright notice, this+list of conditions, the following disclaimer and the following SHA-512 checksum.++2. Redistributions in binary form must reproduce the above copyright notice,+this list of conditions, the following disclaimer and the following SHA-512+checksum in the documentation and/or other materials provided with the+distribution.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++THIS SOFTWARE IS PROVIDED WITH A SHA-512 CHECKSUM.+ecdfdf543fd166b13b76b11e0b010e00d693028771880ffd8f9252ae0b8ac42bddf8eb7a23c21c86a3b50039d642ad9eeb7e8a0e82f6a345f60feb4a54808362
+ Setup.lhs view
@@ -0,0 +1,44 @@+#!/usr/bin/env runhaskell+\begin{code}+{-# OPTIONS_GHC -Wall #-}+module Main (main) where++import Data.List ( nub )+import Data.Version ( showVersion )+import Distribution.Package ( PackageName(PackageName), PackageId, InstalledPackageId, packageVersion, packageName )+import Distribution.PackageDescription ( PackageDescription(), TestSuite(..) )+import Distribution.Simple ( defaultMainWithHooks, UserHooks(..), simpleUserHooks )+import Distribution.Simple.Utils ( rewriteFile, createDirectoryIfMissingVerbose )+import Distribution.Simple.BuildPaths ( autogenModulesDir )+import Distribution.Simple.Setup ( BuildFlags(buildVerbosity), fromFlag )+import Distribution.Simple.LocalBuildInfo ( withLibLBI, withTestLBI, LocalBuildInfo(), ComponentLocalBuildInfo(componentPackageDeps) )+import Distribution.Verbosity ( Verbosity )+import System.FilePath ( (</>) )++main :: IO ()+main = defaultMainWithHooks simpleUserHooks+ { buildHook = \pkg lbi hooks flags -> do+ generateBuildModule (fromFlag (buildVerbosity flags)) pkg lbi+ buildHook simpleUserHooks pkg lbi hooks flags+ }++generateBuildModule :: Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()+generateBuildModule verbosity pkg lbi = do+ let dir = autogenModulesDir lbi+ createDirectoryIfMissingVerbose verbosity True dir+ withLibLBI pkg lbi $ \_ libcfg -> do+ withTestLBI pkg lbi $ \suite suitecfg -> do+ rewriteFile (dir </> "Build_" ++ testName suite ++ ".hs") $ unlines+ [ "module Build_" ++ testName suite ++ " where"+ , "deps :: [String]"+ , "deps = " ++ (show $ formatdeps (testDeps libcfg suitecfg))+ ]+ where+ formatdeps = map (formatone . snd)+ formatone p = case packageName p of+ PackageName n -> n ++ "-" ++ showVersion (packageVersion p)++testDeps :: ComponentLocalBuildInfo -> ComponentLocalBuildInfo -> [(InstalledPackageId, PackageId)]+testDeps xs ys = nub $ componentPackageDeps xs ++ componentPackageDeps ys++\end{code}
+ casr-logbook-types.cabal view
@@ -0,0 +1,94 @@+name: casr-logbook-types+version: 0.0.1+license: OtherLicense+license-file: LICENSE+author: Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>+maintainer: Tony Morris+copyright: Copyright (C) 2016 Tony Morris+synopsis: CASR 61.345 Pilot Personal Logbook+category: Aviation+description: + <<https://i.imgur.com/p6LT40r.png>>+ .+ CASR 61.345 Pilot Personal Logbook+ .+ <<https://i.imgur.com/Lfhcmtg.png>>++homepage: https://github.com/tonymorris/casr-logbook-types+bug-reports: https://github.com/tonymorris/casr-logbook-types/issues+cabal-version: >= 1.10+build-type: Custom+extra-source-files: changelog++source-repository head+ type: git+ location: git@github.com:tonymorris/casr-logbook-types.git++flag small_base+ description: Choose the new, split-up base package.++library+ default-language:+ Haskell2010++ build-depends:+ base < 5 && >= 4.8+ , containers < 0.6 && >= 0.4+ , digit < 3 && >= 0.2.8+ , time < 2 && >= 1.5+ , lens < 5 && >= 4+ + ghc-options:+ -Wall++ default-extensions:+ NoImplicitPrelude++ hs-source-dirs:+ src++ exposed-modules:+ Data.Aviation.Casr.Logbook.Types+ Data.Aviation.Casr.Logbook.Types.Rating+ Data.Aviation.Casr.Logbook.Types.Aviator+ Data.Aviation.Casr.Logbook.Types.Engine+ Data.Aviation.Casr.Logbook.Types.Aircraft+ Data.Aviation.Casr.Logbook.Types.TimeAmount+ Data.Aviation.Casr.Logbook.Types.DayNight+ Data.Aviation.Casr.Logbook.Types.Location+ Data.Aviation.Casr.Logbook.Types.Command+ Data.Aviation.Casr.Logbook.Types.Time+ Data.Aviation.Casr.Logbook.Types.FlightPoint+ Data.Aviation.Casr.Logbook.Types.FlightPath+ Data.Aviation.Casr.Logbook.Types.AircraftFlight+ Data.Aviation.Casr.Logbook.Types.SimulatorFlight+ Data.Aviation.Casr.Logbook.Types.Exam+ Data.Aviation.Casr.Logbook.Types.Briefing+ Data.Aviation.Casr.Logbook.Types.Entry+ Data.Aviation.Casr.Logbook.Types.Entries+ Data.Aviation.Casr.Logbook.Types.Logbook++test-suite doctests+ type:+ exitcode-stdio-1.0++ main-is:+ doctests.hs++ default-language:+ Haskell2010++ build-depends:+ base < 5 && >= 3+ , doctest >= 0.9.7+ , filepath >= 1.3+ , directory >= 1.1+ , QuickCheck >= 2.0+ , template-haskell >= 2.8++ ghc-options:+ -Wall+ -threaded++ hs-source-dirs:+ test
+ changelog view
@@ -0,0 +1,5 @@+0.0.1++* Initial release+* Initial data structures for a CASR 61.345 Pilot Personal Logbook.+* Moved from https://hackage.haskell.org/package/casr-logbook
+ src/Data/Aviation/Casr/Logbook/Types.hs view
@@ -0,0 +1,22 @@+module Data.Aviation.Casr.Logbook.Types (+ module L+) where++import Data.Aviation.Casr.Logbook.Types.Logbook as L+import Data.Aviation.Casr.Logbook.Types.Rating as L+import Data.Aviation.Casr.Logbook.Types.Aviator as L+import Data.Aviation.Casr.Logbook.Types.Engine as L+import Data.Aviation.Casr.Logbook.Types.Aircraft as L+import Data.Aviation.Casr.Logbook.Types.TimeAmount as L+import Data.Aviation.Casr.Logbook.Types.DayNight as L+import Data.Aviation.Casr.Logbook.Types.Location as L+import Data.Aviation.Casr.Logbook.Types.Command as L+import Data.Aviation.Casr.Logbook.Types.Time as L+import Data.Aviation.Casr.Logbook.Types.FlightPoint as L+import Data.Aviation.Casr.Logbook.Types.FlightPath as L+import Data.Aviation.Casr.Logbook.Types.AircraftFlight as L+import Data.Aviation.Casr.Logbook.Types.SimulatorFlight as L+import Data.Aviation.Casr.Logbook.Types.Exam as L+import Data.Aviation.Casr.Logbook.Types.Briefing as L+import Data.Aviation.Casr.Logbook.Types.Entry as L+import Data.Aviation.Casr.Logbook.Types.Entries as L
+ src/Data/Aviation/Casr/Logbook/Types/Aircraft.hs view
@@ -0,0 +1,45 @@+{-# 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 {+ _aircraftType :: String+ , _aircraftRegistration :: String+ , _aircraftEngine :: Engine+ } deriving (Eq, Ord, Show)++makeClassy ''Aircraft++singleaircraft ::+ String+ -> String+ -> Aircraft+singleaircraft t r =+ Aircraft+ t+ r+ Single++multiaircraft ::+ String+ -> String+ -> Aircraft+multiaircraft t r =+ Aircraft+ t+ r+ Multi
+ src/Data/Aviation/Casr/Logbook/Types/AircraftFlight.hs view
@@ -0,0 +1,137 @@+{-# 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.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Types.Aircraft(Aircraft)+import Data.Aviation.Casr.Logbook.Types.Command(Command(ICUS, Dual, InCommand))+import Data.Aviation.Casr.Logbook.Types.DayNight(DayNight)+import Data.Aviation.Casr.Logbook.Types.FlightPath(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++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
+ src/Data/Aviation/Casr/Logbook/Types/Aviator.hs view
@@ -0,0 +1,70 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.Aviator(+ Aviator(..)+, HasAviator(..)+, aviatorwithname+, nodobaviator+, dobaviator+) where++import Control.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Types.Rating(Rating)+import Data.Eq(Eq)+import Data.Ord(Ord)+import Data.Digit(Digit)+import Data.Maybe(Maybe(Nothing, Just))+import Data.String(String)+import Data.Time(Day)+import Prelude(Show)++data Aviator =+ Aviator {+ _surname :: String+ , _firstname :: String+ , _arn :: [Digit]+ , _dob :: Maybe Day+ , _ratings :: [Rating]+ } deriving (Eq, Ord, Show)++makeClassy ''Aviator++aviatorwithname ::+ String+ -> String+ -> Aviator+aviatorwithname s f =+ Aviator+ s+ f+ []+ Nothing+ []++nodobaviator ::+ String+ -> String+ -> [Digit]+ -> [Rating]+ -> Aviator+nodobaviator s f r =+ Aviator+ s + f+ r+ Nothing++dobaviator ::+ String+ -> String+ -> [Digit]+ -> Day+ -> [Rating]+ -> Aviator+dobaviator s f r b =+ Aviator+ s + f+ r+ (Just b)
+ src/Data/Aviation/Casr/Logbook/Types/Briefing.hs view
@@ -0,0 +1,28 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.Briefing(+ Briefing(..)+, HasBriefing(..)+) where+ +import Control.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Types.Aviator(Aviator)+import Data.Aviation.Casr.Logbook.Types.Location(Location)+import Data.Aviation.Casr.Logbook.Types.Time(Time)+import Data.Aviation.Casr.Logbook.Types.TimeAmount(TimeAmount)+import Data.Eq(Eq)+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show)++data Briefing =+ Briefing {+ _briefingName :: String+ , _briefingLocation :: Location+ , _briefingTime :: Time+ , _briefer :: Aviator+ , _briefingTimeAmount :: TimeAmount+ } deriving (Eq, Ord, Show)++makeClassy ''Briefing
+ src/Data/Aviation/Casr/Logbook/Types/Command.hs view
@@ -0,0 +1,33 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.Command(+ Command(..)+, AsCommand(..)+, getInstructingPic+) where++import Control.Lens(makeClassyPrisms)+import Data.Aviation.Casr.Logbook.Types.Aviator(Aviator)+import Data.Eq(Eq)+import Data.Maybe(Maybe(Just, Nothing))+import Data.Ord(Ord)+import Prelude(Show)++data Command =+ ICUS Aviator+ | Dual Aviator+ | InCommand+ deriving (Eq, Ord, Show)++makeClassyPrisms ''Command++getInstructingPic ::+ Command+ -> Maybe Aviator+getInstructingPic (ICUS a) =+ Just a+getInstructingPic (Dual a) =+ Just a+getInstructingPic InCommand =+ Nothing
+ src/Data/Aviation/Casr/Logbook/Types/DayNight.hs view
@@ -0,0 +1,47 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.DayNight(+ DayNight(..)+, HasDayNight(..)+, day+, night+, totalDayNight+) where++import Control.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Types.TimeAmount(TimeAmount(TimeAmount), zerotimeamount)+import Data.Digit(Digit)+import Data.Eq(Eq)+import Data.Int(Int)+import Data.Monoid(mappend)+import Data.Ord(Ord)+import Prelude(Show)++data DayNight =+ DayNight {+ _dayDayNight :: TimeAmount+ , _nightDayNight :: TimeAmount+ } deriving (Eq, Ord, Show)++makeClassy ''DayNight++day ::+ Int+ -> Digit+ -> DayNight+day h p =+ DayNight (TimeAmount h p) zerotimeamount++night ::+ Int+ -> Digit+ -> DayNight+night h p =+ DayNight zerotimeamount (TimeAmount h p)++totalDayNight ::+ DayNight+ -> TimeAmount+totalDayNight (DayNight d n) =+ d `mappend` n
+ src/Data/Aviation/Casr/Logbook/Types/Engine.hs view
@@ -0,0 +1,19 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.Engine(+ Engine(..)+, AsEngine(..)+) where++import Control.Lens(makeClassyPrisms)+import Data.Eq(Eq)+import Data.Ord(Ord)+import Prelude(Show)++data Engine =+ Single+ | Multi+ deriving (Eq, Ord, Show)++makeClassyPrisms ''Engine
+ src/Data/Aviation/Casr/Logbook/Types/Entries.hs view
@@ -0,0 +1,35 @@+{-# 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 (Eq, Ord, Show)++makeWrapped ''Entries++emptyentries ::+ Entries ae se ee be+emptyentries =+ Entries []++singleentry ::+ Entry ae se ee be+ -> Entries ae se ee be+singleentry e =+ Entries [e]
+ src/Data/Aviation/Casr/Logbook/Types/Entry.hs view
@@ -0,0 +1,28 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE FlexibleInstances #-}++module Data.Aviation.Casr.Logbook.Types.Entry(+ Entry(..)+, AsEntry(..)+) where++import Control.Lens(makeClassyPrisms)+import Data.Aviation.Casr.Logbook.Types.AircraftFlight(AircraftFlight)+import Data.Aviation.Casr.Logbook.Types.SimulatorFlight(SimulatorFlight)+import Data.Aviation.Casr.Logbook.Types.Exam(Exam)+import Data.Aviation.Casr.Logbook.Types.Briefing(Briefing)+import Data.Eq(Eq)+import Data.Ord(Ord)+import Prelude(Show)++data Entry ae se ee be =+ AircraftFlightEntry AircraftFlight ae+ | SimulatorFlightEntry SimulatorFlight se+ | ExamEntry Exam ee+ | BriefingEntry Briefing be+ deriving (Eq, Ord, Show)++makeClassyPrisms ''Entry
+ src/Data/Aviation/Casr/Logbook/Types/Exam.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.Exam(+ Exam(..)+, HasExam(..)+, dayonlyexam+) where++import Control.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Types.Aviator(Aviator)+import Data.Aviation.Casr.Logbook.Types.Time(Time, dayonly)+import Data.Aviation.Casr.Logbook.Types.Location(Location)+import Data.Eq(Eq)+import Data.Int(Int)+import Data.Ord(Ord)+import Data.String(String)+import Data.Time(Day)+import Prelude(Show)++data Exam =+ Exam {+ _examName :: String+ , _examLocation :: Location+ , _examTime :: Time+ , _examDelegate :: Aviator+ , _examResult :: Int+ , _examResultMaximum :: Int+ } deriving (Eq, Ord, Show) ++makeClassy ''Exam++dayonlyexam ::+ String+ -> Location+ -> Day+ -> Aviator+ -> Int+ -> Int+ -> Exam+dayonlyexam n l d =+ Exam+ n+ l+ (dayonly d)
+ src/Data/Aviation/Casr/Logbook/Types/FlightPath.hs view
@@ -0,0 +1,61 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.FlightPath(+ FlightPath(..)+, HasFlightPath(..)+, directflightpath+, directcircuit+, pointsatdate+, flightPathList+) where++import Control.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Types.FlightPoint(FlightPoint, pointatdate)+import Data.Eq(Eq)+import Data.Functor((<$>))+import Data.List((++))+import Data.Ord(Ord)+import Data.String(String)+import Data.Time(Day)+import Prelude(Show)++data FlightPath =+ FlightPath {+ _flightStart :: FlightPoint+ , _flightIntermediate :: [FlightPoint]+ , _flightEnd :: FlightPoint+ } deriving (Eq, Ord, Show)++makeClassy ''FlightPath++directflightpath ::+ FlightPoint+ -> FlightPoint+ -> FlightPath+directflightpath x y =+ FlightPath x [] y++directcircuit ::+ FlightPoint+ -> FlightPath+directcircuit x =+ directflightpath x x++pointsatdate ::+ String+ -> [String]+ -> String+ -> Day+ -> FlightPath+pointsatdate x i y d =+ FlightPath+ (pointatdate x d)+ ((\s -> pointatdate s d) <$> i)+ (pointatdate y d)++flightPathList ::+ FlightPath+ -> [FlightPoint]+flightPathList (FlightPath s x e) =+ s : x ++ [e]
+ src/Data/Aviation/Casr/Logbook/Types/FlightPoint.hs view
@@ -0,0 +1,48 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.FlightPoint(+ FlightPoint(..)+, HasFlightPoint(..)+, pointatdate+, runwayatdate+) where++import Control.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Types.Time(Time, dayonly)+import Data.Eq(Eq)+import Data.Maybe(Maybe(Nothing, Just))+import Data.Ord(Ord)+import Data.String(String)+import Data.Time(Day)+import Prelude(Show)++data FlightPoint =+ FlightPoint {+ _point :: String+ , _runway :: Maybe String+ , _landingTime :: Time+ } deriving (Eq, Ord, Show)++makeClassy ''FlightPoint++pointatdate ::+ String+ -> Day+ -> FlightPoint+pointatdate a d =+ FlightPoint+ a+ Nothing+ (dayonly d)++runwayatdate ::+ String+ -> String+ -> Day+ -> FlightPoint+runwayatdate a r d =+ FlightPoint+ a+ (Just r)+ (dayonly d)
+ src/Data/Aviation/Casr/Logbook/Types/Location.hs view
@@ -0,0 +1,22 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.Location(+ Location(..)+, HasLocation(..)+) where++import Control.Lens(makeClassy)+import Data.Eq(Eq)+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show, Double)++data Location =+ Location {+ _locationname :: String+ , _locationlatitude :: Double+ , _locationlongitude :: Double+ } deriving (Eq, Ord, Show)++makeClassy ''Location
+ src/Data/Aviation/Casr/Logbook/Types/Logbook.hs view
@@ -0,0 +1,54 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE FlexibleInstances #-}++module Data.Aviation.Casr.Logbook.Types.Logbook(+ Logbook(..)+, HasLogbook(..)+, aviatorlogbook+, emptylogbook+, singleentrylogbook+) where++import Control.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Types.Aviator(Aviator)+import Data.Aviation.Casr.Logbook.Types.Entries(Entries(Entries), emptyentries, singleentry)+import Data.Aviation.Casr.Logbook.Types.Entry(Entry)+import Data.Eq(Eq)+import Data.Ord(Ord)+import Prelude(Show)++data Logbook ae se ee be =+ Logbook {+ _logbookaviator :: Aviator+ , _logbookentries :: (Entries ae se ee be)+ } deriving (Eq, Ord, Show)++makeClassy ''Logbook++aviatorlogbook ::+ Aviator+ -> [Entry ae se ee be]+ -> Logbook ae se ee be+aviatorlogbook a e =+ Logbook+ a+ (Entries e)++emptylogbook ::+ Aviator+ -> Logbook ae se ee be+emptylogbook a =+ Logbook+ a+ emptyentries++singleentrylogbook ::+ Aviator+ -> Entry ae se ee be+ -> Logbook ae se ee be+singleentrylogbook a e =+ Logbook+ a+ (singleentry e)
+ src/Data/Aviation/Casr/Logbook/Types/Rating.hs view
@@ -0,0 +1,42 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.Rating(+ Rating(..)+, HasRating(..)+, nodayrating+, dayrating+) where++import Control.Lens(makeClassy)+import Data.Eq(Eq)+import Data.Maybe(Maybe(Nothing, Just))+import Data.Ord(Ord)+import Data.String(String)+import Data.Time(Day)+import Prelude(Show)++data Rating =+ Rating {+ _ratingName :: String+ , _ratingAchieved :: Maybe Day+ } deriving (Eq, Ord, Show)++makeClassy ''Rating++nodayrating ::+ String+ -> Rating+nodayrating r =+ Rating+ r+ Nothing++dayrating ::+ String+ -> Day+ -> Rating+dayrating r d =+ Rating+ r+ (Just d)
+ src/Data/Aviation/Casr/Logbook/Types/SimulatorFlight.hs view
@@ -0,0 +1,44 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.SimulatorFlight(+ SimulatorFlight(..)+, HasSimulatorFlight(..)+, dayonlysimulator+) where++import Control.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Types.Time(Time, dayonly)+import Data.Aviation.Casr.Logbook.Types.Aviator(Aviator)+import Data.Aviation.Casr.Logbook.Types.TimeAmount(TimeAmount)+import Data.Eq(Eq)+import Data.Ord(Ord)+import Data.String(String)+import Data.Time(Day)+import Prelude(Show)++data SimulatorFlight =+ SimulatorFlight {+ _simulatorflightname :: String+ , _simulatorflighttime :: Time+ , _simulatortype :: String+ , _simulatorothercrew :: [Aviator]+ , _simulatorTime :: TimeAmount+ , _instrumentsimulatorTime :: TimeAmount+ } deriving (Eq, Ord, Show) ++makeClassy ''SimulatorFlight++dayonlysimulator ::+ String+ -> Day+ -> String+ -> [Aviator]+ -> TimeAmount+ -> TimeAmount+ -> SimulatorFlight+dayonlysimulator n d =+ SimulatorFlight+ n+ (dayonly d)+
+ src/Data/Aviation/Casr/Logbook/Types/Time.hs view
@@ -0,0 +1,37 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.Time(+ Time(..)+, HasTime(..)+, dayonly+, dayandtime+) where++import Control.Lens(makeClassy)+import Data.Eq(Eq)+import Data.Ord(Ord)+import Data.Maybe(Maybe(Nothing, Just))+import Data.Time(Day, TimeOfDay)+import Prelude(Show)++data Time =+ Time {+ _daytime :: Day+ , _timeofday :: Maybe TimeOfDay+ } deriving (Eq, Ord, Show)++makeClassy ''Time++dayonly ::+ Day+ -> Time+dayonly d =+ Time d Nothing++dayandtime ::+ Day+ -> TimeOfDay+ -> Time+dayandtime d t =+ Time d (Just t)
+ src/Data/Aviation/Casr/Logbook/Types/TimeAmount.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Types.TimeAmount(+ TimeAmount(..)+, HasTimeAmount(..)+, parttimeamount+, zerotimeamount+, addtimeamount+, timeAmountBy10+) where++import Control.Lens(makeClassy, ( # ))+import Data.Eq(Eq)+import Data.Digit(Digit, x0, digit, (/+/))+import Data.Int(Int)+import Data.Monoid(Monoid(mempty, mappend))+import Data.Ord(Ord)+import Prelude(Show, Num((+), (*)))++data TimeAmount =+ TimeAmount {+ _hours :: Int+ , _tenthofhour :: Digit+ } deriving (Eq, Ord, Show)++makeClassy ''TimeAmount++parttimeamount ::+ Digit+ -> TimeAmount+parttimeamount =+ TimeAmount 0++zerotimeamount ::+ TimeAmount+zerotimeamount =+ TimeAmount 0 x0++addtimeamount ::+ TimeAmount + -> TimeAmount+ -> TimeAmount+TimeAmount f1 p1 `addtimeamount` TimeAmount f2 p2 =+ let (h, q) = p1 /+/ p2+ in TimeAmount (f1 + f2 + digit # h) q ++timeAmountBy10 ::+ TimeAmount+ -> Int+timeAmountBy10 (TimeAmount a b) =+ a * 10 + digit # b++instance Monoid TimeAmount where+ mempty =+ zerotimeamount+ mappend =+ addtimeamount
+ test/doctests.hs view
@@ -0,0 +1,32 @@+module Main where++import Build_doctests (deps)+import Control.Applicative+import Control.Monad+import Data.List+import System.Directory+import System.FilePath+import Test.DocTest++main ::+ IO ()+main =+ getSources >>= \sources -> doctest $+ "-isrc"+ : "-idist/build/autogen"+ : "-optP-include"+ : "-optPdist/build/autogen/cabal_macros.h"+ : "-hide-all-packages"+ : map ("-package="++) deps ++ sources++getSources :: IO [FilePath]+getSources = filter (isSuffixOf ".hs") <$> go "src"+ where+ go dir = do+ (dirs, files) <- getFilesAndDirectories dir+ (files ++) . concat <$> mapM go dirs++getFilesAndDirectories :: FilePath -> IO ([FilePath], [FilePath])+getFilesAndDirectories dir = do+ c <- map (dir </>) . filter (`notElem` ["..", "."]) <$> getDirectoryContents dir+ (,) <$> filterM doesDirectoryExist c <*> filterM doesFileExist c