
In message <2E9B33CE230409489A7ED37E5E34090F04218DB9@EUR-MSG-20.europe.corp.mic rosoft.com>, "Simon Marlow" writes:
One common case (perhaps the only common case) where this happens is hGetContents. The lazy stream returned by hGetContents will not behave in a non-blocking way in a cooperative implementation. I can't decide which demon to blame here: lazy I/O or cooperative concurrency :-)
Maybe the problem is in combining these demons :-). I mean, maybe the problem is passing an unevaluated thunk containing references to resources of one execution context into another (co-operative) thread. deepSeq'ing the thunk (to force the side effects to take place) in the correct context before allowing access by the other thread should help, I think [but you lose ability to pass functions from one thread to another, which might be worse]. -- Esa Pulkkinen