
Hello Haskellers, I'm wondering how to get the following to work: I need to parse about 18.000 files. I would like to have a function 'parseFiles' that parses all these files and returns the result in a list. When I execute 'test' from the simplified code below I get the error: *** Exception: file_0014994.txt: openFile: resource exhausted (Too many open files) So it seems that 'parseFiles' tries to open all the ~18.000 files and gets exhausted when opening the 14994 file. What I would like is 'take 3 =<< parseFiles' to read only the first 3 files. Is this possible, and if so, what is the best way to do this? Note that the code below is a bit simplified: ------------------------------------------------------------------------------ module Main where import Text.ParserCombinators.Parsec data T = ... test = print . take 3 =<< parseFiles parseFiles :: IO [T] parseFiles = mapM parseFile =<< getFileFPs getFileFPs :: IO [FilePath] getFileFPs = ... -- returns a large list of about 18.000 FilePaths parseFile :: FilePath -> IO T parseFile fp = liftM getRight $ parseFromFile someParser fp getRight (Right r) = r someParser :: Parser T someParser = ... ------------------------------------------------------------------------------ Greetings, Bas van Dijk