packages feed

pathwalk 0.1.0.0 → 0.1.1.0

raw patch · 3 files changed

+35/−35 lines, 3 files

Files

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