module Main import System import System.Concurrency import System.Info -- Taken from tests/chez/futures001 -- Issue in MacOS brew chez related to clock ( https://github.com/Homebrew/homebrew-core/pull/10159 ) -- Windows seems to be really flaky with usleep extraSleep : (us : Int) -> So (us >= 0) => IO () extraSleep us = if (os == "darwin" || isWindows) then sleep (us `div` 10000) else usleep us producer : Channel Nat -> IO () producer ch = do send 1 send 2 send 3 send 4 where send : Nat -> IO () send i = do putStrLn $ "> " ++ show i channelPut ch i extraSleep 10000 consumer : Channel Nat -> IO () consumer ch = do recv recv recv recv where recv : IO () recv = do extraSleep 20000 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"