Transaktionen: STM a

jede Transaktion soll atomar sein

darf keine IO-Aktionen enthalten (da man deren Nebenwirkungen sofort beobachten kann)

$ \Righarrow$ neuer Typ STM a für Aktionen mit Nebenwirkungen nur auf Transaktionsvariablen TVar a

type Account = TVar Int
withdraw :: Account -> Int -> STM ()
withdraw account m = do
    balance <- readTVar account
    writeTVar account ( balance - m )
transfer :: Account -> Account -> Int -> IO ()
transfer from to m = atomically 
  ( do withdraw from m ; deposit to m    )



Johannes Waldmann 2013-02-01