From c4cf3b0be2606b144d5646ef4f5fc295cab1e877 Mon Sep 17 00:00:00 2001 From: Jan Sucan Date: Sun, 31 Aug 2025 16:25:47 +0200 Subject: 18_a_1: Add missing module CountEntries from the examples --- ch18/CountEntries.hs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 ch18/CountEntries.hs (limited to 'ch18/CountEntries.hs') 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 --} -- cgit v1.2.3