streamly/examples/parallel-loops.hs
2017-08-28 07:33:47 +05:30

21 lines
589 B
Haskell

import Control.Applicative ((<|>))
import Control.Concurrent (myThreadId, threadDelay)
import Control.Monad.IO.Class (liftIO)
import System.IO (stdout, hSetBuffering, BufferMode(LineBuffering))
import System.Random (randomIO)
import Asyncly
main = runAsyncly $ do
liftIO $ hSetBuffering stdout LineBuffering
x <- loop "A" <|> loop "B"
liftIO $ myThreadId >>= putStr . show
>> putStr " "
>> print x
where
loop name = do
liftIO $ threadDelay 1000000
rnd <- liftIO (randomIO :: IO Int)
return (name, rnd) <|> loop name