
9 Feb
2011
9 Feb
'11
10:44 a.m.
On 09/02/11 15:34, Krzysztof Skrzętnicki wrote:
Hello Cafe,
Here is a simple program that yields strange results:
module Main where
import Control.Concurrent import Control.Concurrent.Chan import Control.Monad
main = do c <- newChan writeChan c 1 forkIO $ forever $ do i <- readChan c print ("forkio",i) isEmptyChan c >>= print
Now, this is strange thing: we put single element into the channel. We take it out.
What your program does is put a single element into the channel, and then *repeatedly* try to take one out (notice the forever you have in there!). Judging by the results, the program deadlocks, which seems like a reasonable outcome to me. Thanks, Neil.