Idris2/tests/allschemes/channels006/Main.idr

40 lines
622 B
Idris
Raw Normal View History

module Main
import System
import System.Concurrency
producer : Channel Nat -> IO ()
producer ch =
do send 1
send 2
send 3
send 4
2022-10-03 23:25:05 +03:00
where
send : Nat -> IO ()
send i =
do putStrLn $ "> " ++ show i
channelPut ch i
consumer : Channel Nat -> IO ()
consumer ch =
do recv
recv
recv
recv
2022-10-03 23:25:05 +03:00
where
recv : IO ()
recv =
do usleep 100000
v <- channelGet ch
putStrLn $ "< " ++ show v
main : IO ()
main =
do ch <- makeChannel
p <- fork $ producer ch
c <- fork $ consumer ch
threadWait c
threadWait p
putStrLn "done"