query set
This commit is contained in:
parent
144e20bdde
commit
0f2469c364
|
@ -0,0 +1,22 @@
|
|||
#lang typed/syndicate/roles
|
||||
|
||||
;; Expected Output
|
||||
;; size: 0
|
||||
;; size: 2
|
||||
|
||||
(define-type-alias ds-type
|
||||
(U (Tuple String Int)
|
||||
(Observe ★/t)))
|
||||
|
||||
(dataspace ds-type
|
||||
(spawn ds-type
|
||||
(start-facet querier
|
||||
(define/query-set key (tuple "key" (bind v Int)) v)
|
||||
(assert (tuple "size" (set-count (ref key))))))
|
||||
(spawn ds-type
|
||||
(start-facet client
|
||||
(assert (tuple "key" 18))
|
||||
(assert (tuple "key" 88))
|
||||
(during (tuple "size" (bind v Int))
|
||||
(on start
|
||||
(printf "size: ~v\n" v))))))
|
|
@ -13,7 +13,7 @@
|
|||
;; Statements
|
||||
let let* if spawn dataspace start-facet set! begin stop #;unsafe-do
|
||||
;; Derived Forms
|
||||
during define/query-value
|
||||
during define/query-value define/query-set
|
||||
;; endpoints
|
||||
assert on field
|
||||
;; expressions
|
||||
|
@ -30,7 +30,7 @@
|
|||
;; lists
|
||||
list first rest member? empty? for for/fold
|
||||
;; sets
|
||||
Set set set-member? set-add set-count set-union set-subtract set-intersect
|
||||
Set set set-member? set-add set-remove set-count set-union set-subtract set-intersect
|
||||
list->set set->list
|
||||
;; DEBUG and utilities
|
||||
print-type print-role
|
||||
|
@ -946,6 +946,17 @@
|
|||
(on (retracted p)
|
||||
(set! x e0-)))])
|
||||
|
||||
(define-typed-syntax (define/query-set x:id p e) ≫
|
||||
#:with ([y τ] ...) (pat-bindings #'p)
|
||||
;; e will be re-expanded :/
|
||||
[[y ≫ y- : τ] ... ⊢ e ≫ e- ⇒ τ-e]
|
||||
----------------------------------------
|
||||
[≻ (begin (field [x (Set τ-e) (set)])
|
||||
(on (asserted p)
|
||||
(set! x (set-add (ref x) e)))
|
||||
(on (retracted p)
|
||||
(set! x (set-remove (ref x) e))))])
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Expressions
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
@ -1370,6 +1381,14 @@
|
|||
-------------------------
|
||||
[⊢ (set-add- st- v-) ⇒ (Set (U τs τv))])
|
||||
|
||||
(define-typed-syntax (set-remove st v) ≫
|
||||
[⊢ st ≫ st- ⇒ (~Set τs)]
|
||||
#:fail-unless (pure? #'st-) "expression must be pure"
|
||||
[⊢ v ≫ v- ⇐ τs]
|
||||
#:fail-unless (pure? #'v-) "expression must be pure"
|
||||
-------------------------
|
||||
[⊢ (set-remove- st- v-) ⇒ (Set τs)])
|
||||
|
||||
(define-typed-syntax (set-member? st v) ≫
|
||||
[⊢ st ≫ st- ⇒ (~Set τs)]
|
||||
#:fail-unless (pure? #'st-) "expression must be pure"
|
||||
|
|
Loading…
Reference in New Issue