{-# LANGUAGE MultiWayIf #-}
module Main (main) where
import Control.Applicative
import Control.Monad
import Control.Monad.List
import Data.List
import System.Directory
import System.FilePath
import Test.DocTest
main :: IO ()
main = do
sources <- findSources "src"
doctest ("-isrc" : sources)
findSources :: FilePath -> IO [FilePath]
findSources dir = runListT (goDir dir)
where
goItem :: FilePath -> FilePath -> ListT IO FilePath
goItem _ ('.':_) = empty
goItem parent name = do
let path = parent </> name
isDir <- liftIO (doesDirectoryExist path)
isFile <- liftIO (doesFileExist path)
if | isDir -> goDir path
| isFile -> goFile path
| otherwise -> empty
goDir path = goItem path =<< ListT (getDirectoryContents path)
goFile path = path <$ guard (".hs" `isSuffixOf` path)