On 14 January 2012 18:05, Steffen Schuldenzucker <[email protected]> wrote:
> 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 _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
