packages feed

hasql-postgres-0.9.0: doctest/Main.hs

-- The code is mostly ripped from
-- https://github.com/ekmett/lens/blob/d1d97469f0e93c1d3535308954a060e8a04e37aa/tests/doctests.hsc
import BasePrelude
import System.Directory
import System.FilePath
import Test.DocTest
import Build_doctest (deps)

main :: IO ()
main = do
  sources <- getSources
  doctest $ dfltParams ++ map ("-package="++) deps ++ sources
  where
    dfltParams = 
      [
        "-isrc",
        "-idist/build/autogen",
        "-optP-include",
        "-optPdist/build/autogen/cabal_macros.h",
        "-XArrows",
        "-XBangPatterns",
        "-XConstraintKinds",
        "-XDataKinds",
        "-XDefaultSignatures",
        "-XDeriveDataTypeable",
        "-XDeriveFunctor",
        "-XDeriveGeneric",
        "-XEmptyDataDecls",
        "-XFlexibleContexts",
        "-XFlexibleInstances",
        "-XFunctionalDependencies",
        "-XGADTs",
        "-XGeneralizedNewtypeDeriving",
        "-XImpredicativeTypes",
        "-XLambdaCase",
        "-XLiberalTypeSynonyms",
        "-XMultiParamTypeClasses",
        "-XMultiWayIf",
        "-XNoImplicitPrelude",
        "-XNoMonomorphismRestriction",
        "-XOverloadedStrings",
        "-XPatternGuards",
        "-XParallelListComp",
        "-XQuasiQuotes",
        "-XRankNTypes",
        "-XRecordWildCards",
        "-XScopedTypeVariables",
        "-XStandaloneDeriving",
        "-XTemplateHaskell",
        "-XTupleSections",
        "-XTypeFamilies",
        "-XTypeOperators",
        "-hide-all-packages"
      ]

getSources :: IO [FilePath]
getSources = filter (isSuffixOf ".hs") <$> go "library"
  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