-- 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" with current state and incoming messages -- as arguments. account :: Int -> [Message] -> Bool account balance messages = case messages of -- suspends if free variable [] -> 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 -- Create account and send some messages: -- > account 0 ms & ms =:= [Deposit 100, Withdraw 20, Balance b] where b,ms free