;;; SPDX-License-Identifier: LGPL-3.0-or-later ;;; SPDX-FileCopyrightText: Copyright © 2010-2024 Tony Garnock-Jones #lang syndicate ;; Simple mutable box and count-to-infinity box client. (message-struct set-box (new-value)) (assertion-struct box-state (value)) (module+ main (standard-actor-system/no-services (ds) (spawn #:name 'box (define-field current-value 0) (at ds (assert (box-state (current-value))) (on (message (set-box $new-value)) (log-info "box: taking on new-value ~v" new-value) (current-value new-value))) (stop-on-true (= (current-value) 10) (log-info "box: terminating"))) (spawn #:name 'client (at ds (stop-on (retracted (Observe (:pattern (set-box ,_)) _)) (log-info "client: box has gone")) (on (asserted (box-state $v)) (log-info "client: learned that box's value is now ~v" v) (send! (set-box (+ v 1)))) (on (retracted (box-state _)) (log-info "client: box state disappeared"))))))