getContents

Simon Marlow simonmar@microsoft.com
Thu, 26 Oct 2000 04:13:58 -0700


> I don't really understand getContents.  (Does anyone?)  I 
> have some code here
> (far too large to submit).  If I do (on Linux, ghc4.08.1, 
> both with and without optimisation)
> ------------------      
>       contents <- hGetContents handle
>       seq (last contents) (hClose handle)
> ------------------
> the code works.  However I looked at the manual and it seems 
> that hClose should
> force the whole of contents to be read anyway.  So I changed it to
> ------------------
>       contents <- hGetContents handle
>       hClose handle
> ------------------
> and then the code doesn't work.  If these are meant to be the 
> same, then we have a GHC
> bug.  If not, could someone explain in words of one syllable why not?
> 
> PS - if you want the source code you'll have to download and 
> compile the whole of UniForM!!

Using hClose on a semi-closed handle is a Bad Thing.  The Haskell Report
says:

	"Once a semi-closed handle becomes closed, the contents of 
	 the associated stream becomes fixed, and is the list of those
	 items which were succesfully read from that handle".

So I take this to mean that when you hClose a semi-closed handle, you get a
random amount of data in the handle which depends on how good your
compiler's strictness analyser is.  yesno?

Cheers,
	Simon