From bde7e79a3809eb5dbe1d45eef4c997e42898c589 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 10 Jan 2023 11:05:51 +0000 Subject: [PATCH] failed attempt at composifying --- packages/core/controls.mjs | 10 +++++++++- packages/core/pattern.mjs | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/core/controls.mjs b/packages/core/controls.mjs index b156f7213..65b7b3748 100644 --- a/packages/core/controls.mjs +++ b/packages/core/controls.mjs @@ -819,7 +819,15 @@ const _setter = (func, name) => }; generic_params.forEach(([type, name, description]) => { - controls[name] = (...pats) => _name(name, ...pats); + controls[name] = function (...pats) { + const result = _name(name, ...pats); + + // Add a function for composing this control with another pattern + result.__compose = function (pat) { + return pat[name](...pats); + }; + return result; + }; Pattern.prototype[name] = _setter(controls[name], name); }); diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index d3fc7b4db..1e0fa8674 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -1569,6 +1569,13 @@ export const outside = register('outside', function (factor, f, pat) { */ export const lastOf = register('lastOf', function (n, func, pat) { const pats = Array(n - 1).fill(pat); + + // It seems we have a pattern, but with a 'compose' function, let's + // use that + if ('__compose' in func) { + func = func.__compose; + } + pats.push(func(pat)); return slowcatPrime(...pats); });