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
|
;; Statements
|
||||||
let let* if spawn dataspace start-facet set! begin stop #;unsafe-do
|
let let* if spawn dataspace start-facet set! begin stop #;unsafe-do
|
||||||
;; Derived Forms
|
;; Derived Forms
|
||||||
during define/query-value
|
during define/query-value define/query-set
|
||||||
;; endpoints
|
;; endpoints
|
||||||
assert on field
|
assert on field
|
||||||
;; expressions
|
;; expressions
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
;; lists
|
;; lists
|
||||||
list first rest member? empty? for for/fold
|
list first rest member? empty? for for/fold
|
||||||
;; sets
|
;; 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
|
list->set set->list
|
||||||
;; DEBUG and utilities
|
;; DEBUG and utilities
|
||||||
print-type print-role
|
print-type print-role
|
||||||
|
@ -946,6 +946,17 @@
|
||||||
(on (retracted p)
|
(on (retracted p)
|
||||||
(set! x e0-)))])
|
(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
|
;; Expressions
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
@ -1370,6 +1381,14 @@
|
||||||
-------------------------
|
-------------------------
|
||||||
[⊢ (set-add- st- v-) ⇒ (Set (U τs τv))])
|
[⊢ (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) ≫
|
(define-typed-syntax (set-member? st v) ≫
|
||||||
[⊢ st ≫ st- ⇒ (~Set τs)]
|
[⊢ st ≫ st- ⇒ (~Set τs)]
|
||||||
#:fail-unless (pure? #'st-) "expression must be pure"
|
#:fail-unless (pure? #'st-) "expression must be pure"
|
||||||
|
|
Loading…
Reference in New Issue