ü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 retry
benutzt Funktionen:
readTVar :: TVar a -> STM a writeTVar :: TVar a -> a -> STM a atomically :: STM a -> IO a