[reactive] Bug fixes in progress

Isaac Dupree ml at isaac.cedarswampstudios.org
Fri May 29 15:34:53 EDT 2009


Svein Ove Aas wrote:
> Okay. I've tested, and there is no bug.
> 
> This breaks my mental model of how unsafePerformIO actually works
> somewhat. I'm going to have to chat with #ghc before I can write any
> comments.

thanks for the written reflections! (and someday when we're sufficiently 
confident that they're correct, it can turn into comments in the code :-)

So, how it works, as I understand it: when GHC resumes the thread, it 
does not re-execute the throwTo (since it was already executed last 
time), just like it would not re-execute a putChar.  The only reason we 
don't use throw/throwIO is that a closure interrupted by a *synchronous* 
exception won't be re-tried at all by the RTS (it will memorize that it 
evaluates to that exception, instead -- after all, that's more efficient 
in normal, pure, non-unsafePerformIO cases where a thunk leads to an 
error-call).

now, I might have misunderstood, or it might have changed (there was a 
discussion a few months(?) ago, about what to do in general about 
throw/throwTo/unsafePerformIO; -- and this is all fiddly business)

-Isaac


More information about the Reactive mailing list