On Wed, 17 Sep 2008, Mitchell, Neil wrote:
I tend to use openFile, hGetContents, hClose - your initial readFile
like call should be openFile/hGetContents, which gives you a lazy
stream, and on a parse error call hClose.
I could use a function like
withReadFile :: FilePath -> (Handle -> IO a) -> IO a
withReadFile name action = bracket openFile hClose ...
Then, if 'action' fails, the file can be properly closed. However, there
is still a problem: Say, 'action' is a parser which produces a data
structure lazily. Then further processing of that data structure of type
'a' may again stop before completing the whole structure, which would also
leave the file open. We have to force users to do all processing within
'action' and to only return strict values. But how to do this?
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe