-- A concurrent bank account -- Messages for the bank account data Message = Deposit Int | Withdraw Int | Balance Int -- The bank account "server": account :: Int -> [Message] -> Bool account b messages = case messages of [] -> True (Deposit a : ms) -> account (b + a) ms (Withdraw a : ms) -> account (b - a) ms (Balance a : ms) -> b==a & account b ms