
On Wednesday 07 March 2007 10:22, D.V. wrote:
On 3/6/07, mm
wrote: I cannot help you with your question more than pointing you to
http://bugs.darcs.net/issue391
where Simon Marlow explains how to avoid "IO.bracket".
I'm using Control.Exception's bracket.
Also, following Jeremy's advice, I replaced the last line of rechf2 with return $! rech r $ lines f and indeed it works.
I don't understand why it doesn't without the !
The documentation for hGetContents says the items are read on demand. the function rech needs the strings so they should be read on demand. This confuses me :(
The problem is that hGetContents only reads the contents of the file on demand and, without the 'return $!' you don't demand the value until somewhere outside of rechf. By this point the hClose has happened and hGetContents has no access to the file => no lines => no result. Using 'return $!' is demanding the value of rech r $ lines f immediately so hGetContents accesses the file before the hClose. hGetContents is implemented using unsafePerformIO so, unless you're very careful, you could get other weird behaviours. Daniel