diff --git a/Distribution/Compat/Directory.hs b/Distribution/Compat/Directory.hs index fd0b68a80b32553c56a10348eca69aa7488e0c02..70ee16325b637b8795803f56c46e7b9d784aae05 100644 --- a/Distribution/Compat/Directory.hs +++ b/Distribution/Compat/Directory.hs @@ -1,6 +1,7 @@ module Distribution.Compat.Directory ( findExecutable, copyFile, getHomeDirectory, createDirectoryIfMissing, - removeDirectoryRecursive, module System.Directory + removeDirectoryRecursive, module System.Directory, + getDirectoryContentsWithoutSpecial ) where #if __GLASGOW_HASKELL__ && __GLASGOW_HASKELL__ < 604 @@ -110,8 +111,8 @@ createDirectoryIfMissing parents file = do removeDirectoryRecursive :: FilePath -> IO () removeDirectoryRecursive startLoc = do - cont <- getDirectoryContents startLoc - sequence_ [rm (startLoc `joinFileName` x) | x <- cont, x /= "." && x /= ".."] + cont <- getDirectoryContentsWithoutSpecial startLoc + mapM_ (rm . joinFileName startLoc) cont removeDirectory startLoc where rm :: FilePath -> IO () @@ -124,3 +125,7 @@ removeDirectoryRecursive startLoc = do Right _ -> return () #endif + +getDirectoryContentsWithoutSpecial :: FilePath -> IO [FilePath] +getDirectoryContentsWithoutSpecial = + fmap (filter (not . flip elem [".", ".."])) . getDirectoryContents