pathwalk 0.1.0.0 → 0.1.1.0
raw patch · 3 files changed
+35/−35 lines, 3 files
Files
- pathwalk.cabal +2/−2
- src/System/Directory/PathWalk.hs +33/−0
- src/Within/PathWalk.hs +0/−33
pathwalk.cabal view
@@ -1,5 +1,5 @@ name: pathwalk-version: 0.1.0.0+version: 0.1.1.0 synopsis: Path walking utilities for Haskell programs description: Simple directory tree walking utilities. license: PublicDomain@@ -15,7 +15,7 @@ location: https://github.com/Xe/pathwalk library- exposed-modules: Within.PathWalk+ exposed-modules: System.Directory.PathWalk build-depends: base >=4.6 && <4.7, directory >=1.2 && <1.3, filepath >=1.3 && <1.4 hs-source-dirs: src default-language: Haskell2010
+ src/System/Directory/PathWalk.hs view
@@ -0,0 +1,33 @@+module Within.PathWalk where++import Control.Monad (forM_)+import Data.IORef (newIORef, readIORef, writeIORef)+import System.Directory (doesDirectoryExist, getDirectoryContents)+import System.FilePath ((</>))++pathWalk :: FilePath -> (FilePath -> [FilePath] -> [FilePath] -> IO ()) -> IO ()+pathWalk root callback = do+ dirs <- newIORef ([] :: [FilePath])+ files <- newIORef ([] :: [FilePath])+ names <- getDirectoryContents root+ let properNames = filter (`notElem` [".", ".."]) names++ forM_ properNames $ \name -> do+ isDir <- doesDirectoryExist $ root </> name++ case isDir of+ True -> do+ val <- readIORef dirs+ writeIORef dirs $ val ++ [name]+ False -> do+ val <- readIORef files+ writeIORef files $ val ++ [name]++ cbDirs <- readIORef dirs+ cbFiles <- readIORef files++ callback root cbDirs cbFiles++ forM_ cbDirs $ \dir -> do+ let newPath = root </> dir+ pathWalk newPath callback
− src/Within/PathWalk.hs
@@ -1,33 +0,0 @@-module Within.PathWalk where--import Control.Monad (forM_)-import Data.IORef (newIORef, readIORef, writeIORef)-import System.Directory (doesDirectoryExist, getDirectoryContents)-import System.FilePath ((</>))--pathWalk :: FilePath -> (FilePath -> [FilePath] -> [FilePath] -> IO ()) -> IO ()-pathWalk root callback = do- dirs <- newIORef ([] :: [FilePath])- files <- newIORef ([] :: [FilePath])- names <- getDirectoryContents root- let properNames = filter (`notElem` [".", ".."]) names-- forM_ properNames $ \name -> do- isDir <- doesDirectoryExist $ root </> name-- case isDir of- True -> do- val <- readIORef dirs- writeIORef dirs $ val ++ [name]- False -> do- val <- readIORef files- writeIORef files $ val ++ [name]-- cbDirs <- readIORef dirs- cbFiles <- readIORef files-- callback root cbDirs cbFiles-- forM_ cbDirs $ \dir -> do- let newPath = root </> dir- pathWalk newPath callback