@@ -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)
6+import Asyncly
7+
8+main = wait_ $ do
9+ liftIO $ hSetBuffering stdout LineBuffering
10+ x <- loop "A" <|> loop "B"
11+ liftIO $ myThreadId >>= putStr . show
12+ >> putStr " "
13+ >> print x
14+
15+ where
16+
17+ loop name = do
18+ liftIO $ threadDelay 1000000
19+ rnd <- liftIO (randomIO :: IO Int)
20+ return (name, rnd) <|> loop name