[Haskell-cafe] readFile and closing a file
lemming at henning-thielemann.de
Mon Sep 22 05:24:20 EDT 2008
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?
More information about the Haskell-Cafe