From 971cfe15fc25bf9df080a62b63e5403e1956824e Mon Sep 17 00:00:00 2001 From: Aria Date: Tue, 18 Nov 2025 16:07:22 -0600 Subject: [PATCH] Merge main and use parray --- packages/core/pattern.mjs | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 8581fd37d..b695f0cd8 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -3552,29 +3552,6 @@ export const morph = (frompat, topat, bypat) => { return frompat.innerBind((from) => topat.innerBind((to) => bypat.innerBind((by) => _morph(from, to, by)))); }; -const _asArrayPattern = (pats) => { - const pack = (...xs) => xs; - let acc = pure(curry(pack, null, pats.length)); - for (const p of pats) acc = acc.appBoth(p); - return acc; -}; - -/** - * Establishes an FX chain. Can be called by chaining .FX().FX().. - * calls and/or in a single .FX(, , ..) call. The , .. are _patterns_ which - * establish the controls of the given effect. See examples. - * @name FX - * @memberof Pattern - * @returns Pattern - */ -Pattern.prototype.FX = function (...effects) { - effects = effects.map(reify); - return this.withValue((v) => (vEff) => { - const currFX = v.FX ?? []; - return { ...v, FX: currFX.concat(vEff) }; - }).appLeft(_asArrayPattern(effects)); -}; - /** * Soft-clipping distortion * @@ -3710,3 +3687,19 @@ Pattern.prototype.phases = function (list) { export const phases = (list) => { return _ensureListPattern(list).as('phases'); }; + +/** + * Establishes an FX chain. Can be called by chaining .FX().FX().. + * calls and/or in a single .FX(, , ..) call. The , .. are _patterns_ which + * establish the controls of the given effect. See examples. + * @name FX + * @memberof Pattern + * @returns Pattern + */ +Pattern.prototype.FX = function (...effects) { + effects = effects.map(reify); + return this.withValue((v) => (vEff) => { + const currFX = v.FX ?? []; + return { ...v, FX: currFX.concat(vEff) }; + }).appLeft(parray(effects)); +};