From 9c5e26e8f1c0d1c8a6eeaab4645d4fbe867219f3 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Wed, 26 Jul 2023 11:01:47 +0100 Subject: [PATCH] Patterns sugar --- src/syndicate.nim | 3 +++ src/syndicate/patterns.nim | 5 +++++ syndicate.nimble | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/syndicate.nim b/src/syndicate.nim index 92f73e7..6075df5 100644 --- a/src/syndicate.nim +++ b/src/syndicate.nim @@ -31,6 +31,9 @@ proc `?`*(typ: static typedesc): Pattern {.inline.} = proc `?`*(typ: static typedesc; bindings: sink openArray[(int, Pattern)]): Pattern {.inline.} = patterns.grab(typ, bindings) +proc `?`*(typ: static typedesc; bindings: sink openArray[(Assertion, Pattern)]): Pattern {.inline.} = + patterns.grab(typ, bindings) + proc `??`*(pat: Pattern; bindings: openArray[(int, Pattern)]): Pattern {.inline.} = patterns.inject(pat, bindings) diff --git a/src/syndicate/patterns.nim b/src/syndicate/patterns.nim index b7aa8fc..442b97a 100644 --- a/src/syndicate/patterns.nim +++ b/src/syndicate/patterns.nim @@ -286,6 +286,11 @@ proc grabRecord*(label: Preserve[Cap], fields: varargs[Pattern]): Pattern = """> >]>""" DCompoundRec(label: label, fields: fields.toSeq).toPattern +proc grabRecord*(label: string, fields: varargs[Pattern]): Pattern = + ## Sugar for creating record patterns. + ## `label` is converted to a symbol value. + grabRecord(label.toSymbol(Cap), fields) + proc grabDictionary*(bindings: sink openArray[(Value, Pattern)]): Pattern = ## Construct a pattern that grabs some dictionary pairs. DCompoundDict(entries: bindings.toTable).toPattern diff --git a/syndicate.nimble b/syndicate.nimble index 3444268..470108d 100644 --- a/syndicate.nimble +++ b/syndicate.nimble @@ -1,6 +1,6 @@ # Package -version = "20230725" +version = "20230726" author = "Emery Hemingway" description = "Syndicated actors for conversational concurrency" license = "Unlicense"