-- | Recursively read the paths in a directory. -- -- Based on `RecursiveContents` example in chapter 9 of "Real World Haskell". module Text.Docvim.ReadDir (readDir) where import Control.Monad import System.Directory import System.FilePath readDir :: FilePath -> IO [FilePath] readDir dir = do names <- getDirectoryContents dir let properNames = filter (`notElem` [".", ".."]) names paths <- forM properNames $ \name -> do let path = dir name isDirectory <- doesDirectoryExist path if isDirectory then readDir path else return [path] return (concat paths)