27 lines
901 B
Racket
27 lines
901 B
Racket
#lang typed/syndicate
|
|
|
|
(assertion-struct ping : Ping (v))
|
|
(assertion-struct pong : Pong (v))
|
|
|
|
(assertion-struct flip : Flip (v))
|
|
(assertion-struct flop : Flop (v))
|
|
|
|
(define-type-alias Pinger (Ping Int))
|
|
(define-type-alias Ponger (U (Ping Int)
|
|
(Pong Int)
|
|
(Observe (Ping ★/t))))
|
|
(define-type-alias PingPong (U Pinger Ponger))
|
|
|
|
(define-type-alias Flipper (Flip Int))
|
|
(define-type-alias Flopper (U (Flip Int)
|
|
(Flop Int)
|
|
(Observe (Flip ★/t))))
|
|
(define-type-alias FlipFlop (U Flipper Flopper))
|
|
|
|
(run-ground-dataspace (U PingPong FlipFlop)
|
|
(spawn Pinger (start-facet _ (assert (ping 5))))
|
|
(spawn Ponger (start-facet _ (during (ping $v) (assert (pong v)))))
|
|
|
|
(spawn Flipper (start-facet _ (assert (flip 8))))
|
|
(spawn Flopper (start-facet _ (during (flip $v) (assert (flop v))))))
|