Problem with hugs, concurrency and unsafeInterleaveIO (maybe a bug?)
Nick Name
nick.name@inwind.it
Sat, 15 Mar 2003 20:01:32 +0100
I am trying to lazily wait an MVar in hugs, in conjunction with
concurrent haskell:
-----
import Concurrent
import IOExts
f = do
v <- newEmptyMVar
c <- getContents
forkIO (putMVar v (head c))
r <- unsafeInterleaveIO (takeMVar v)
return v
f2 = f >>= unsafeInterleaveIO . takeMVar
main1 = f >>= takeMVar >>= print
main2 = f2 >>= print
main3 = f2 >>= (\ x -> yield >> print x)
-----
main1 and main3 work flawlessly, but main2 aborts with "no more threads
to run".
I think that main2 should work, because in evaluating the result of f2,
the main thread should suspend and yield.
Is there somebody who wants to enlighten me?
Vincenzo