main = do
v <- newCVar
+ done <- newEmptyMVar
let
reader = do
c <- readCVar v
if (c == '\n')
- then return ()
+ then putMVar done ()
else do putChar c; reader
writer [] = do writeCVar v '\n'; return ()
forkIO reader
writer "Hello World"
+ takeMVar done