@@ -0,0 +1,20 @@
1+import Control.Applicative ((<|>))
2+import Control.Concurrent (myThreadId, threadDelay)
3+import Control.Monad.IO.Class (liftIO)
4+import System.IO (stdout, hSetBuffering, BufferMode(LineBuffering))
5+import System.Random (randomIO)
9+ liftIO $ hSetBuffering stdout LineBuffering
10+ x <- loop "A" <|> loop "B"
11+ liftIO $ myThreadId >>= putStr . show
18+ liftIO $ threadDelay 1000000
19+ rnd <- liftIO (randomIO :: IO Int)
20+ return (name, rnd) <|> loop name