[Haskell-cafe] Re: A GHC error message puzzle

Tillmann Rendel rendel at Mathematik.Uni-Marburg.de
Thu Aug 12 19:17:16 EDT 2010


Hi,

the reading is not needed to make it happen.

   main = writeFile "output" blackhole where blackhole = blackhole

In fact, writing is not needed either.

   main = bracket
     (openFile "output" WriteMode)
     hClose
     (\hdl -> blackhole `seq` return ())

   blackhole = blackhole

Note that writeFile is indeed like this, so this seems to be the same 
problem.

Sebastian Fischer wrote:
> Of course, the cause is the black hole. But why is it not reported?

I guess the following happens: When the blackhole is detected in the 
third argument of bracket, the second argument is executed. But for some 
reason, the handle is already finalized at this point, so hClose raises 
an exception itself. But bracket reraises the exception from its third 
argument only if its second argument does not raise an exception itself. 
So in this case, the "handle is finalized" exception seems to eat the 
"blackhole" exception.

So the question remains: Why is the handle finalized?

(And what is "finalizing an handle"?)

   Tillmann


More information about the Haskell-Cafe mailing list