On Fri, 2008-01-11 at 20:20 -0200, Andre Nathan wrote:
> Both versions which use getDirectoryContents also use much more memory
> than the one which uses readDirStream (about 8M vs about 2M). Maybe I'm
> not exploting getDirectoryContents' laziness correctly? I expected the
> second and third versions to run in about the same time.
Forgot to paste the code...
foo :: IO ()
foo = do
entries <- getDirectoryContents "."
let procs = filter (=~ "^[0-9]+$") entries
mapM_ putStrLn procs
processEntry :: DirStream -> IO ()
processEntry ds = do
entry <- readDirStream ds
if entry =~ "^[0-9]+$"
then do
putStrLn entry
processEntry ds
else
if entry == "" then return () else processEntry ds
bar :: IO ()
bar = do
ds <- openDirStream "."
processEntry ds
closeDirStream ds
processEntry' :: FilePath -> IO ()
processEntry' entry = do
if entry =~ "^[0-9]+$"
then putStrLn entry
else return ()
baz :: IO ()
baz = do
entries <- getDirectoryContents "."
mapM_ processEntry' entries
main = forM_ [1..1000] $ \_ -> foo {- bar -} {- baz -}
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe