typed define/dataflow
This commit is contained in:
parent
606dd17e08
commit
ab15f7306f
|
@ -24,6 +24,7 @@
|
||||||
define/query-value
|
define/query-value
|
||||||
define/query-set
|
define/query-set
|
||||||
define/query-hash
|
define/query-hash
|
||||||
|
define/dataflow
|
||||||
on-start on-stop
|
on-start on-stop
|
||||||
;; endpoints
|
;; endpoints
|
||||||
assert know on field
|
assert know on field
|
||||||
|
@ -513,6 +514,22 @@
|
||||||
(define-simple-macro (on-stop e ...)
|
(define-simple-macro (on-stop e ...)
|
||||||
(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
|
;; 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