-- A concurrent bank account -- Messages for the bank account data Message = Deposit Int -- argument: amount of payment | Withdraw Int -- argument: amount of waithdraw | Balance Int -- argument: current balance -- The bank account "server": account :: Int -> [Message] -> Bool account balance messages = case messages of [] -> True -- end of process execution (Deposit a : ms) -> account (balance + a) ms (Withdraw a : ms) -> account (balance - a) ms (Balance b : ms) -> b === balance & account balance ms