
Hello folks, Newbie question: how can I do something like the following? mixing IO and STM. module Test where import System.Random import Control.Concurrent import Control.Concurrent.STM test_Cubby = do tv <- newTVar 0 forkIO (producer tv) >> (consumer tv) where producer tv = do r <- randomRIO (1,10) atomically (do { v <- readTVar tv ; writeTVar tv (v+r) }) print ("insert " ++ show r) producer tv return () consumer tv = do r <- randomRIO (1,10) atomically (do { v <- readTVar tv ; if (v < r) then retry else writeTVar tv (v-r) }) print ("consume " ++ show r) consumer tv return () Thanks.