⇒ darf keine IO-Aktionen enthalten (da man deren Nebenwirkungen sofort beobachten kann)
⇒ 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 )