streamly-0.1.0: examples/parallel-loops.hs
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 Streamly
main = runStreamT $ 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