#lang syndicate/core
;; Demonstrate almost-wildcard assertions.
;; One actor subscribes to everything except inbound assertions - and so initially sees itself.
;; The other advertises everything except subscriptions and inbound/outbound assertions.
;; The first actor's aggregate view of the dataspace then includes everything
;; except inbound assertions.

(require syndicate/pretty)

(actor (lambda (e s)
         (printf "Subscriber - Aggregate\n")
         (syndicate-pretty-print s)
         (printf "Subscriber - Patch\n")
         (syndicate-pretty-print e)
         (newline)
         (if (patch? e)
             (transition (update-interests s e) '())
             #f))
       trie-empty
       (patch-seq (sub ?)
                  (unsub (inbound ?))))

(actor (lambda (e s)
         (printf "Asserter\n")
         (syndicate-pretty-print e)
         (newline)
         #f)
       (void)
       (patch-seq (assert ?)
                  (retract (observe ?))
                  (retract (outbound ?))
                  (retract (inbound ?))))
