Sha256: ffa87763259c1e653327222bf23d29c662e68294d3d94c550e4d87b80cd93e64
Contents?: true
Size: 735 Bytes
Versions: 328
Compression:
Stored size: 735 Bytes
Contents
module BankAccount ( BankAccount , openAccount, closeAccount , getBalance, incrementBalance) where import Control.Concurrent.STM newtype BankAccount = BankAccount { unBankAccount :: TVar (Maybe Int) } openAccount :: IO BankAccount openAccount = atomically $ BankAccount <$> newTVar (Just 0) closeAccount :: BankAccount -> IO () closeAccount = atomically . flip writeTVar Nothing . unBankAccount getBalance :: BankAccount -> IO (Maybe Int) getBalance = atomically . readTVar . unBankAccount incrementBalance :: BankAccount -> Int -> IO (Maybe Int) incrementBalance acct delta = atomically $ do let b = unBankAccount acct bal <- fmap (delta +) <$> readTVar b writeTVar b bal return bal
Version data entries
328 entries across 328 versions & 1 rubygems