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

Reply via email to