From db6eccd9748c9c31e9ec2d53aa54189d159923f4 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 20 Oct 2026 10:55:23 +0200 Subject: [PATCH] core: synapse implementation (with op for changing or cancelling msg) --- scopes/core/core.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scopes/core/core.py b/scopes/core/core.py index dd0bf96..6a98106 100644 --- a/scopes/core/core.py +++ b/scopes/core/core.py @@ -17,8 +17,9 @@ type Mailbox = asyncio.Queue type Categ = tuple[Symbol, Symbol] type Proc = Callable[[Message, Scope], Awaitable[Scope | None]] type Program = Callable[[Scope], Proc] -type Syn = Callable[[Message], Message] type ProgramSpec = dict[tuple[Symbol, Symbol], Proc] +type Syn = Callable[[Message], Awaitable[None]] +type SynOp = Callable[[Message], Message | None] type Handler = Callable[[Message, Scope], Awaitable[Message | None | tuple[Message | None, Scope | None]]] @@ -72,6 +73,13 @@ def create_zero(env: Mailbox) -> Mailbox: zero = neuron(scope) return zero +def synapse(rcvr: Mailbox, op: SynOp = lambda x: x) -> Syn: + async def syn(msg: Message) -> None: + msg_new = op(msg) + if msg_new is not None: + await rcvr.put(msg_new) + return syn + def gen_proc(actions: Actions, default: Handlers = None, before: Handlers = None, after: Handlers = None) -> Proc: async def proc(msg: Message, scope: Scope) -> Scope: