-- example from
-- http://www.haskell.org/pipermail/glasgow-haskell-users/2008-November/015878.html

main = do
    m <- newMVar (0 :: Int)
    forkIO $ putMVar m 1
    yield
    r1 <- readMVar m
    r2 <- takeMVar m
    r3 <- takeMVar m
    return ()
main = do
    m <- newMVar (0 :: Int)
    forkIO $ putMVar m 1
    yield
    r1 <- readMVar m
    r2 <- takeMVar m
    r3 <- takeMVar m
    return ()
main = do
    m <- newMVar (0 :: Int)
    forkIO $ putMVar m 1
    yield
    r1 <- readMVar m
    r2 <- takeMVar m
    r3 <- takeMVar m
    return ()