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"