[Haskell-cafe] semi-closed handles

Abhay Parvate abhay.parvate at gmail.com
Mon Apr 14 08:07:29 EDT 2008


In describing the Handle type, the GHC documentation says (in the System.IO

GHC note: a Handle will be automatically closed when the garbage collector
detects that it has become unreferenced by the program. However, relying on
this behaviour is not generally recommended: the garbage collector is
unpredictable. If possible, use explicit an explicit hClose to close Handles
when they are no longer required. GHC does not currently attempt to free up
file descriptors when they have run out, it is your responsibility to ensure
that this doesn't happen.

But one cannot call hClose on Handles on which something like hGetContents
has been called; it just terminates the character list at the point till
which it has already read. Further the manual says that hGetContents puts
the handle in the semi-closed state, and further,

A semi-closed handle becomes closed:

   - if hClose is applied to it;
   - if an I/O error occurs when reading an item from the handle;
   - or once the entire contents of the handle has been read.

So do I safely assume here, according to the third point above, that it's
fine if I do not call hClose explicitly as far as I am consuming all the
contents returned by hGetContents?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20080414/ddeeaaa2/attachment.htm

More information about the Haskell-Cafe mailing list