packages feed

casr-logbook-meta (empty) → 0.0.1

raw patch · 24 files changed

+628/−0 lines, 24 filesdep +QuickCheckdep +basedep +casr-logbookbuild-type:Customsetup-changed

Dependencies added: QuickCheck, base, casr-logbook, directory, doctest, filepath, lens, template-haskell

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-meta.cabal view
@@ -0,0 +1,94 @@+name:               casr-logbook-meta+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:           Meta-information about entries in a CASR 61.345 logbook (casr-logbook)+category:           Aviation+description:        +  <<https://i.imgur.com/p6LT40r.png>>+  .+  CASR 61.345 Pilot Personal Logbook Meta-information about entries+  .+  <<https://i.imgur.com/Lfhcmtg.png>>++homepage:           https://github.com/tonymorris/casr-logbook-meta+bug-reports:        https://github.com/tonymorris/casr-logbook-meta/issues+cabal-version:      >= 1.10+build-type:         Custom+extra-source-files: changelog++source-repository   head+  type:             git+  location:         git@github.com:tonymorris/casr-logbook-meta.git++flag                small_base+  description:      Choose the new, split-up base package.++library+  default-language:+                    Haskell2010++  build-depends:+                    base < 5 && >= 4.8+                    , casr-logbook >= 0.1.3 && < 0.2+                    , lens >= 4.1 && < 5+                    +  ghc-options:+                    -Wall++  default-extensions:+                    NoImplicitPrelude++  hs-source-dirs:+                    src++  exposed-modules:+                    Data.Aviation.Casr.Logbook.Meta+                    Data.Aviation.Casr.Logbook.Meta.AircraftFlightExpense+                    Data.Aviation.Casr.Logbook.Meta.AircraftFlightMeta+                    Data.Aviation.Casr.Logbook.Meta.AircraftLandingExpense+                    Data.Aviation.Casr.Logbook.Meta.AircraftUsageExpense+                    Data.Aviation.Casr.Logbook.Meta.BriefingExpense+                    Data.Aviation.Casr.Logbook.Meta.BriefingMeta+                    Data.Aviation.Casr.Logbook.Meta.ExamExpense+                    Data.Aviation.Casr.Logbook.Meta.ExamMeta+                    Data.Aviation.Casr.Logbook.Meta.Image+                    Data.Aviation.Casr.Logbook.Meta.ImageType+                    Data.Aviation.Casr.Logbook.Meta.SimulatorFlightExpense+                    Data.Aviation.Casr.Logbook.Meta.SimulatorFlightMeta+                    Data.Aviation.Casr.Logbook.Meta.TrackLog+                    Data.Aviation.Casr.Logbook.Meta.TrackLogs+                    Data.Aviation.Casr.Logbook.Meta.TrackLogType+                    Data.Aviation.Casr.Logbook.Meta.Video+                    Data.Aviation.Casr.Logbook.Meta.VideoType+                    Data.Aviation.Casr.Logbook.Meta.Visualisation++++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,4 @@+0.0.1++* Initial release+
+ src/Data/Aviation/Casr/Logbook/Meta.hs view
@@ -0,0 +1,22 @@+module Data.Aviation.Casr.Logbook.Meta (+  module A+) where++import Data.Aviation.Casr.Logbook.Meta.AircraftFlightExpense as A+import Data.Aviation.Casr.Logbook.Meta.AircraftFlightMeta as A+import Data.Aviation.Casr.Logbook.Meta.AircraftLandingExpense as A+import Data.Aviation.Casr.Logbook.Meta.AircraftUsageExpense as A+import Data.Aviation.Casr.Logbook.Meta.BriefingExpense as A+import Data.Aviation.Casr.Logbook.Meta.BriefingMeta as A+import Data.Aviation.Casr.Logbook.Meta.ExamExpense as A+import Data.Aviation.Casr.Logbook.Meta.ExamMeta as A+import Data.Aviation.Casr.Logbook.Meta.Image as A+import Data.Aviation.Casr.Logbook.Meta.ImageType as A+import Data.Aviation.Casr.Logbook.Meta.SimulatorFlightExpense as A+import Data.Aviation.Casr.Logbook.Meta.SimulatorFlightMeta as A+import Data.Aviation.Casr.Logbook.Meta.TrackLog as A+import Data.Aviation.Casr.Logbook.Meta.TrackLogs as A+import Data.Aviation.Casr.Logbook.Meta.TrackLogType as A+import Data.Aviation.Casr.Logbook.Meta.Video as A+import Data.Aviation.Casr.Logbook.Meta.VideoType as A+import Data.Aviation.Casr.Logbook.Meta.Visualisation as A
+ src/Data/Aviation/Casr/Logbook/Meta/AircraftFlightExpense.hs view
@@ -0,0 +1,19 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.AircraftFlightExpense(+  AircraftFlightExpense(ExpenseAircraftUsage, ExpenseAircraftLanding)+) where++import Control.Lens(makeClassyPrisms)+import Data.Aviation.Casr.Logbook.Meta.AircraftLandingExpense+import Data.Aviation.Casr.Logbook.Meta.AircraftUsageExpense+import Data.Eq(Eq)+import Data.Ord(Ord)+import Prelude(Show)++data AircraftFlightExpense =+  ExpenseAircraftUsage AircraftUsageExpense+  | ExpenseAircraftLanding AircraftLandingExpense+  deriving (Eq, Ord, Show)++makeClassyPrisms ''AircraftFlightExpense
+ src/Data/Aviation/Casr/Logbook/Meta/AircraftFlightMeta.hs view
@@ -0,0 +1,26 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.AircraftFlightMeta(+  AircraftFlightMeta(AircraftFlightMeta)+) where++import Control.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Meta.AircraftFlightExpense+import Data.Aviation.Casr.Logbook.Meta.Image+import Data.Aviation.Casr.Logbook.Meta.TrackLog+import Data.Aviation.Casr.Logbook.Meta.Video+import Data.Aviation.Casr.Logbook.Meta.Visualisation+import Data.Eq(Eq)+import Data.Ord(Ord)+import Prelude(Show)++data AircraftFlightMeta =+  AircraftFlightMeta {+    _tracklogs :: [TrackLog]+  , _visualisations :: [Visualisation]+  , _images :: [Image]+  , _videos :: [Video]+  , _expenses :: [AircraftFlightExpense]+  } deriving (Eq, Ord, Show)++makeClassy '' AircraftFlightMeta
+ src/Data/Aviation/Casr/Logbook/Meta/AircraftLandingExpense.hs view
@@ -0,0 +1,20 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.AircraftLandingExpense(+  AircraftLandingExpense(AircraftLandingExpense)+) where++import Control.Lens(makeClassy)+import Data.Eq(Eq)+import Data.Int(Int)+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show)++data AircraftLandingExpense =+  AircraftLandingExpense {+    _aircraftlandingexpenseamount :: Int+  , _aircraftlandingexpensename :: String+  } deriving (Eq, Ord, Show)++makeClassy ''AircraftLandingExpense
+ src/Data/Aviation/Casr/Logbook/Meta/AircraftUsageExpense.hs view
@@ -0,0 +1,20 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.AircraftUsageExpense(+  AircraftUsageExpense(AircraftUsageExpense)+) where++import Control.Lens(makeClassy)+import Data.Eq(Eq)+import Data.Int(Int)+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show)++data AircraftUsageExpense =+  AircraftUsageExpense {+    _aircraftusageexpenseperhour :: Int+  , _aircraftusageexpensename :: String+  } deriving (Eq, Ord, Show)++makeClassy ''AircraftUsageExpense
+ src/Data/Aviation/Casr/Logbook/Meta/BriefingExpense.hs view
@@ -0,0 +1,20 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.BriefingExpense(+  BriefingExpense(BriefingExpense)+) where++import Control.Lens(makeClassy)+import Data.Eq(Eq)+import Data.Int(Int)+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show)++data BriefingExpense =+  BriefingExpense {+    _briefingexpenseperhour :: Int+  , _briefingexpensename :: String+  } deriving (Eq, Ord, Show)++makeClassy ''BriefingExpense
+ src/Data/Aviation/Casr/Logbook/Meta/BriefingMeta.hs view
@@ -0,0 +1,22 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleInstances #-}++module Data.Aviation.Casr.Logbook.Meta.BriefingMeta(+  BriefingMeta(BriefingMeta)+) where++import Control.Lens(makeClassy, makeWrapped)+import Data.Aviation.Casr.Logbook.Meta.BriefingExpense+import Data.Eq(Eq)+import Data.Ord(Ord)+import Prelude(Show)++newtype BriefingMeta =+  BriefingMeta+    [BriefingExpense]+  deriving (Eq, Ord, Show)++makeClassy ''BriefingMeta+makeWrapped ''BriefingMeta
+ src/Data/Aviation/Casr/Logbook/Meta/ExamExpense.hs view
@@ -0,0 +1,20 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.ExamExpense(+  ExamExpense(ExamExpense)+) where++import Control.Lens(makeClassy)+import Data.Eq(Eq)+import Data.Int(Int)+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show)++data ExamExpense =+  ExamExpense {+    _examexpenseamount :: Int+  , _examexpensename :: String+  } deriving (Eq, Ord, Show)++makeClassy ''ExamExpense
+ src/Data/Aviation/Casr/Logbook/Meta/ExamMeta.hs view
@@ -0,0 +1,22 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleInstances #-}++module Data.Aviation.Casr.Logbook.Meta.ExamMeta(+  ExamMeta(ExamMeta)+) where++import Control.Lens(makeClassy, makeWrapped)+import Data.Aviation.Casr.Logbook.Meta.ExamExpense+import Data.Eq(Eq)+import Data.Ord(Ord)+import Prelude(Show)++newtype ExamMeta =+  ExamMeta+    [ExamExpense]+  deriving (Eq, Ord, Show)++makeClassy ''ExamMeta+makeWrapped ''ExamMeta
+ src/Data/Aviation/Casr/Logbook/Meta/Image.hs view
@@ -0,0 +1,23 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.Image(+  Image(Image)+) where++import Control.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Meta.ImageType+import Data.Eq(Eq)+import Data.Maybe(Maybe)+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show)++data Image =+  Image {+    _imageuri :: String+  , _imagetype :: ImageType+  , _imagesource :: Maybe String+  , _imagename :: Maybe String+  } deriving (Eq, Ord, Show)+  +makeClassy ''Image
+ src/Data/Aviation/Casr/Logbook/Meta/ImageType.hs view
@@ -0,0 +1,18 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.ImageType(+  ImageType(Jpg, Png, Gif)+) where++import Control.Lens(makeClassyPrisms)+import Data.Eq(Eq)+import Data.Ord(Ord)+import Prelude(Show)++data ImageType =+  Jpg+  | Png+  | Gif+  deriving (Eq, Ord, Show)++makeClassyPrisms ''ImageType
+ src/Data/Aviation/Casr/Logbook/Meta/SimulatorFlightExpense.hs view
@@ -0,0 +1,20 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.SimulatorFlightExpense(+  SimulatorFlightExpense(SimulatorFlightExpense)+) where++import Control.Lens(makeClassy)+import Data.Eq(Eq)+import Data.Int(Int)+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show)++data SimulatorFlightExpense =+  SimulatorFlightExpense {+    _simulatorflightexpenseperhour :: Int+  , _simulatorflightexpensename :: String+  } deriving (Eq, Ord, Show)++makeClassy ''SimulatorFlightExpense
+ src/Data/Aviation/Casr/Logbook/Meta/SimulatorFlightMeta.hs view
@@ -0,0 +1,22 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleInstances #-}++module Data.Aviation.Casr.Logbook.Meta.SimulatorFlightMeta(+  SimulatorFlightMeta(SimulatorFlightMeta)+) where++import Control.Lens(makeClassy, makeWrapped)+import Data.Aviation.Casr.Logbook.Meta.SimulatorFlightExpense+import Data.Eq(Eq)+import Data.Ord(Ord)+import Prelude(Show)++newtype SimulatorFlightMeta =+  SimulatorFlightMeta+    [SimulatorFlightExpense]+  deriving (Eq, Ord, Show)++makeClassy ''SimulatorFlightMeta+makeWrapped ''SimulatorFlightMeta
+ src/Data/Aviation/Casr/Logbook/Meta/TrackLog.hs view
@@ -0,0 +1,23 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.TrackLog(+  TrackLog(TrackLog)+) where++import Control.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Meta.TrackLogType+import Data.Eq(Eq)+import Data.Maybe(Maybe)+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show)++data TrackLog =+  TrackLog {+    _trackloguri :: String+  , _tracklogtype :: TrackLogType+  , _tracklogsource :: Maybe String+  , _tracklogname :: Maybe String+  } deriving (Eq, Ord, Show)+  +makeClassy ''TrackLog
+ src/Data/Aviation/Casr/Logbook/Meta/TrackLogType.hs view
@@ -0,0 +1,20 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.TrackLogType(+  TrackLogType(Gpx, Kml, Kmz, ImageTrackLog)+) where++import Control.Lens(makeClassyPrisms)+import Data.Aviation.Casr.Logbook.Meta.ImageType+import Data.Eq(Eq)+import Data.Ord(Ord)+import Prelude(Show)++data TrackLogType =+  Gpx+  | Kml+  | Kmz+  | ImageTrackLog ImageType+  deriving (Eq, Ord, Show)++makeClassyPrisms ''TrackLogType
+ src/Data/Aviation/Casr/Logbook/Meta/TrackLogs.hs view
@@ -0,0 +1,22 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleInstances #-}++module Data.Aviation.Casr.Logbook.Meta.TrackLogs(+  TrackLogs(TrackLogs)+) where++import Control.Lens(makeClassy, makeWrapped)+import Data.Aviation.Casr.Logbook.Meta.TrackLog+import Data.Eq(Eq)+import Data.Ord(Ord)+import Prelude(Show)++newtype TrackLogs =+  TrackLogs+    [TrackLog]+  deriving (Eq, Ord, Show)++makeClassy ''TrackLogs+makeWrapped ''TrackLogs
+ src/Data/Aviation/Casr/Logbook/Meta/Video.hs view
@@ -0,0 +1,23 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.Video(+  Video(Video)+) where++import Control.Lens(makeClassy)+import Data.Aviation.Casr.Logbook.Meta.VideoType+import Data.Eq(Eq)+import Data.Maybe(Maybe)+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show)++data Video =+  Video {+    _videouri :: String+  , _videotype :: VideoType+  , _videosource :: Maybe String+  , _videoname :: Maybe String+  } deriving (Eq, Ord, Show)++makeClassy ''Video
+ src/Data/Aviation/Casr/Logbook/Meta/VideoType.hs view
@@ -0,0 +1,44 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.VideoType(+  VideoType(YouTube, Vimeo, Bambuser)+, linkVideoType+, iframeVideoType+) where++import Control.Lens(makeClassyPrisms)+import Data.Eq(Eq)+import Data.List((++))+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show)++data VideoType =+  YouTube+  | Vimeo+  | Bambuser+  deriving (Eq, Ord, Show)+  +makeClassyPrisms ''VideoType++linkVideoType ::+  VideoType+  -> String+  -> String+linkVideoType YouTube u =+  "https://www.youtube.com/watch?v=" ++ u+linkVideoType Vimeo u =+  "https://bambuser.com/v/" ++ u +linkVideoType Bambuser u =+  "https://vimeo.com/" ++ u++iframeVideoType ::+  VideoType+  -> String+  -> String+iframeVideoType YouTube u =+  "http://www.youtube.com/embed/" ++ u ++ "?autohide=1&amp;cc_load_policy=1&amp;color=white&amp;controls=1&amp;disablekb=0&amp;fs=1&amp;iv_load_policy=0&amp;loop=0&amp;modestbranding=1&amp;rel=0&amp;showinfo=0"+iframeVideoType Vimeo u =+  "https://player.vimeo.com/video/" ++ u+iframeVideoType Bambuser u =+  "https://embed.bambuser.com/broadcast/" ++ u ++ "?chat=1&amp;mute=0"
+ src/Data/Aviation/Casr/Logbook/Meta/Visualisation.hs view
@@ -0,0 +1,21 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.Aviation.Casr.Logbook.Meta.Visualisation(+  Visualisation(Doarama)+) where++import Control.Lens(makeClassy)+import Data.Eq(Eq)+import Data.Maybe(Maybe)+import Data.Ord(Ord)+import Data.String(String)+import Prelude(Show)++data Visualisation =+  Doarama {+    _doaramaid :: String+  , _oembedid :: String+  , _doaramaname :: Maybe String+  } deriving (Eq, Ord, Show)++makeClassy ''Visualisation
+ 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