39 lines
764 B
Racket
39 lines
764 B
Racket
#lang typed/syndicate
|
|
|
|
;; Expected Output:
|
|
;; +42
|
|
;; +18
|
|
;; +9
|
|
;; +88
|
|
;; -18
|
|
;; -9
|
|
|
|
(define-type-alias ds-type
|
|
(U (Tuple Int)
|
|
(Observe (Tuple ★/t))))
|
|
|
|
(run-ground-dataspace ds-type
|
|
(spawn ds-type
|
|
(print-role
|
|
(start-facet doomed
|
|
(assert (tuple 18))
|
|
(on (asserted (tuple 42))
|
|
(stop doomed
|
|
(start-facet the-afterlife
|
|
(assert (tuple 88))))))))
|
|
|
|
(spawn ds-type
|
|
(start-facet obs
|
|
(assert (tuple 42))
|
|
(on (asserted (tuple (bind x Int)))
|
|
(printf "+~v\n" x))
|
|
(on (retracted (tuple (bind x Int)))
|
|
(printf "-~v\n" x))))
|
|
|
|
;; null-ary stop
|
|
(spawn ds-type
|
|
(start-facet meep
|
|
(assert (tuple 9))
|
|
(on (asserted (tuple 88))
|
|
(stop meep)))))
|