typed define/dataflow
This commit is contained in:
parent
479ea2fc1f
commit
142206d8e3
|
@ -24,6 +24,7 @@
|
|||
define/query-value
|
||||
define/query-set
|
||||
define/query-hash
|
||||
define/dataflow
|
||||
on-start on-stop
|
||||
;; endpoints
|
||||
assert know on field
|
||||
|
@ -513,6 +514,22 @@
|
|||
(define-simple-macro (on-stop e ...)
|
||||
(on stop e ...))
|
||||
|
||||
(define-typed-syntax define/dataflow
|
||||
[(define/dataflow x:id τ:type e) ≫
|
||||
[⊢ e ≫ e- (⇐ : τ)]
|
||||
#:fail-unless (pure? #'e-) "expression must be pure"
|
||||
;; because the begin/dataflow body is scheduled to run at some later point,
|
||||
;; the initial value is visible e.g. immediately after the define/dataflow
|
||||
;; #:with place-holder (attach #'(#%datum- #f) ': #'τ.norm)
|
||||
----------------------------------------
|
||||
[≻ (begin (field [x τ e-])
|
||||
(begin/dataflow (set! x e-)))]]
|
||||
[(define/dataflow x:id e) ≫
|
||||
[⊢ e ≫ e- (⇒ : τ)]
|
||||
#:fail-unless (pure? #'e-) "expression must be pure"
|
||||
----------------------------------------
|
||||
[≻ (define/dataflow x τ e-)]])
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Expressions
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
#lang typed/syndicate/roles
|
||||
|
||||
(run-ground-dataspace (U)
|
||||
(spawn (U)
|
||||
(start-facet x
|
||||
(field [y Int 0])
|
||||
(define/dataflow x (add1 (ref y)))
|
||||
(displayln (add1 (ref x)))
|
||||
;; print 2
|
||||
#f))
|
||||
)
|
Loading…
Reference in New Issue