
On 14 January 2012 18:05, Steffen Schuldenzucker
I think "consistent state" here means that you can be sure no other thread has modified a, say, TVar, within the current 'atomically' block.
OK, well take a modified example, where I am wanting to call an IO function within an atomically block: --- import Control.Concurrent.STM import Control.Monad.IO.Class (liftIO) addThree :: TVar Int -> Int -> STM () addThree t = do i <- liftIO three -- Problem line ls <- readTVar t writeTVar t (ls + i) three :: IO Int three = return 3 main :: IO () main = do val <- atomically $ do tvar <- newTVar 0 addThree tvar readTVar tvar putStrLn $ "Value: " ++ show val --- Are IO functions permissible in STM atomically blocks? If so how? If not, how would one get around a problem of having to use an IO function to retrieve a value that is to be written to a TVar ? -- Rob