[reactive] Re: black hole detection and concurrency

Isaac Dupree isaacdupree at charter.net
Mon Dec 29 15:32:54 EST 2008

Bertram Felgenhauer wrote:
> Now in fact, IO actions are indistinguishable from pure computations by
> the RTS, so this mechanism also makes IO actions resumable, in
> principle, if you can access the corresponding thunk somehow. Normally
> you can't - there is no reference to that thunk - but unsafePerformIO
> gives you that reference.

I wonder if other things break in the presence of resumable 
IO computations... the first thing that comes to mind is, 
inside a "block" or "unblock" (which have to initiate, take 
down and deal with all that infrastructure -- luckily you 
only use them inside a separate thread, a forkIO within the 
unsafePerformIO... Which admittedly makes things horribly 
confusing in its own way. Also does forkIO copy any state? 
it copies blocked status now, which the unamb-calling thread 
might have...).  The state of the thread when entering the 
computation again, could be different than it was when the 
computation was first suspended, I'm guessing.  (At least 
you need to be careful about what invariants you assume; I'm 
not yet sure if it's possible to be careful enough.)


More information about the Glasgow-haskell-users mailing list