diff --git a/packages/core/src/runtime/rewrite.ts b/packages/core/src/runtime/rewrite.ts index a1b0fe5..6f8004f 100644 --- a/packages/core/src/runtime/rewrite.ts +++ b/packages/core/src/runtime/rewrite.ts @@ -19,6 +19,8 @@ import { PEmbedded, Pattern, Rewrite, + TAttenuate, + TCompound, TRef, Template, _embedded, @@ -191,6 +193,11 @@ export function rfilter(... patterns: Pattern[]): Caveat { return ps.length === 1 ? Caveat.Rewrite(ps[0]) : Caveat.Alts(Alts(ps)); } +export function rmap(... rewrites: [Pattern, Template][]): Caveat { + const rs = rewrites.map(([pattern, template]) => Rewrite({ pattern, template })); + return rs.length === 1 ? Caveat.Rewrite(rs[0]) : Caveat.Alts(Alts(rs)); +} + export function attenuate(ref: Ref, ... a: Caveat[]): Ref { if (a.length === 0) return ref; return { ... ref, attenuation: [... (ref.attenuation ?? []), ... a] }; @@ -286,3 +293,27 @@ export function pBoolean(): Pattern { export function pDiscard(): Pattern { return Pattern.PDiscard(PDiscard()); } + +export function tRec(label: SturdyValue, ... fields: Array