syndicate-2017/racket/syndicate/examples/actor/bank-account.rkt

20 lines
557 B
Racket

#lang syndicate
;; Hello-worldish "bank account" example.
(require syndicate/actor)
(struct account (balance) #:prefab)
(struct deposit (amount) #:prefab)
(actor (forever #:collect [(balance 0)]
(assert (account balance))
(on (message (deposit $amount))
(+ balance amount))))
(actor (forever (on (asserted (account $balance))
(printf "Balance changed to ~a\n" balance))))
(actor (until (asserted (observe (deposit _))))
(send! (deposit +100))
(send! (deposit -30)))