module Main where

import Control.Applicative
import Control.Monad
import Data.List (isSuffixOf)
import System.Directory (getDirectoryContents, doesDirectoryExist)
import System.FilePath ((</>))
import Test.DocTest (doctest)


main :: IO ()
main = sources "src" >>= doctest

sources :: FilePath -> IO [FilePath]
sources root = do
  files <- contents root
  liftM concat . forM files $ \file -> do
    let path = root </> file
    is_dir <- doesDirectoryExist path
    case is_dir of
      True              -> sources path
      _ | isSource path -> return [path]
        | otherwise     -> return []
 where
  isSource path = any (`isSuffixOf` path) [".hs", ".lhs"]

contents :: FilePath -> IO [FilePath]
contents dir = filter (`notElem` [".", ".."]) <$> getDirectoryContents dir