packages feed

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 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