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

Version Path
trackler-2.2.1.110 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.109 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.108 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.107 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.106 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.105 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.104 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.103 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.102 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.101 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.100 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.99 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.98 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.97 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.96 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.95 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.94 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.93 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.92 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs
trackler-2.2.1.91 tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs