module Argon.Walker (allFiles)
where
import Data.Sequence (Seq)
import qualified Data.Sequence as S
import Data.List (foldl1', isSuffixOf)
#if __GLASGOW_HASKELL__ < 710
import Data.Monoid (mappend)
import Control.Applicative ((<$>))
#endif
import System.FilePath ((</>))
import System.Directory
import System.Directory.PathWalk
allFiles :: [FilePath] -> IO (Seq FilePath)
allFiles paths = foldl1' mappend <$> mapM descend paths
descend :: FilePath -> IO (Seq FilePath)
descend path = do
isFile <- doesFileExist path
if isFile then return $ haskellFiles $ S.singleton path
else findSourceFiles path
haskellFiles :: Seq FilePath -> Seq FilePath
haskellFiles = S.filter (".hs" `isSuffixOf`)
findSourceFiles :: FilePath -> IO (Seq FilePath)
findSourceFiles path =
pathWalkAccumulate path $ \dir _ files ->
return $ fmap (dir </>) $ haskellFiles $ S.fromList files