diff options
Diffstat (limited to 'ch18')
| -rw-r--r-- | ch18/CountEntries.hs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/ch18/CountEntries.hs b/ch18/CountEntries.hs new file mode 100644 index 0000000..706bec2 --- /dev/null +++ b/ch18/CountEntries.hs @@ -0,0 +1,22 @@ +{-- snippet countEntriesTrad --}
+module CountEntries (listDirectory, countEntriesTrad) where
+
+import System.Directory (doesDirectoryExist, getDirectoryContents)
+import System.FilePath ((</>))
+import Control.Monad (forM, liftM)
+
+listDirectory :: FilePath -> IO [String]
+listDirectory = liftM (filter notDots) . getDirectoryContents
+ where notDots p = p /= "." && p /= ".."
+
+countEntriesTrad :: FilePath -> IO [(FilePath, Int)]
+countEntriesTrad path = do
+ contents <- listDirectory path
+ rest <- forM contents $ \name -> do
+ let newName = path </> name
+ isDir <- doesDirectoryExist newName
+ if isDir
+ then countEntriesTrad newName
+ else return []
+ return $ (path, length contents) : concat rest
+{-- /snippet countEntriesTrad --}
|
