überweise ( betrag :: Geld ) ( quelle :: TVar Geld ) ( ziel :: TVar Geld ) = atomically $ do q <- readTVar quelle if ( q >= betrag ) then do writeTVar quelle $ q - betrag z <- readTVar ziel writeTVar ziel $ z + betrag else retrybenutzt Funktionen:
readTVar :: TVar a -> STM a writeTVar :: TVar a -> a -> STM a atomically :: STM a -> IO a