27 lines
981 B
Racket
27 lines
981 B
Racket
#lang syndicate-monolithic
|
|
;; Simple mutable box and count-to-infinity box client.
|
|
|
|
(struct set-box (new-value) #:transparent)
|
|
(struct box-state (value) #:transparent)
|
|
|
|
(spawn (lambda (e current-value)
|
|
(match e
|
|
[(message (set-box new-value))
|
|
(log-info "box: taking on new-value ~v" new-value)
|
|
(transition new-value (scn/union (subscription (set-box ?))
|
|
(assertion (box-state new-value))))]
|
|
[_ #f]))
|
|
0
|
|
(scn/union (subscription (set-box ?))
|
|
(assertion (box-state 0))))
|
|
|
|
(spawn (lambda (e s)
|
|
(match e
|
|
[(scn assertions)
|
|
(transition s (for/list [(v (project-assertions assertions (box-state (?!))))]
|
|
(log-info "client: learned that box's value is now ~v" v)
|
|
(message (set-box (+ v 1)))))]
|
|
[_ #f]))
|
|
(void)
|
|
(scn (subscription (box-state ?))))
|