on 5054813 help sign in
streamly/test/parallel-loops.hs
27 lines 833 B history raw
1import Control.Concurrent (myThreadId, threadDelay)
2import System.IO (stdout, hSetBuffering, BufferMode(LineBuffering))
3import System.Random (randomIO)
4import Streamly
5import qualified Streamly.Prelude as S
7main :: IO ()
8main = do
9 hSetBuffering stdout LineBuffering
10 S.drain $ do
11 x <- S.take 10 $ loop "A" `parallel` loop "B"
12 S.yieldM $ myThreadId >>= putStr . show
13 >> putStr " got "
14 >> print x
16 where
18 -- we can just use
19 -- parallely $ cycle1 $ yieldM (...)
20 loop :: String -> Serial (String, Int)
21 loop name = do
22 S.yieldM $ threadDelay 1000000
23 rnd <- S.yieldM (randomIO :: IO Int)
24 S.yieldM $ myThreadId >>= putStr . show
25 >> putStr " yielding "
26 >> print rnd
27 return (name, rnd) `parallel` loop name