Working squeezeBind

This commit is contained in:
alex 2022-04-12 11:22:53 +01:00
parent 357b0ee467
commit c2cc6b6dc8
2 changed files with 17 additions and 6 deletions

View File

@ -588,7 +588,7 @@ class Pattern {
function query(state) {
const haps = pat_of_pats.query(state);
function flatHap(outerHap) {
const pat = outerHap.value.compressArc(outerHap.wholeOrPart().cycleArc());
const pat = outerHap.value._compressSpan(outerHap.wholeOrPart().cycleArc());
const innerHaps = pat.query(state.setSpan(outerHap.part));
function munge(outer, inner) {
let whole = undefined;
@ -599,19 +599,21 @@ class Pattern {
return undefined;
}
}
const part = inner.part.intersection(outer_part);
const part = inner.part.intersection(outer.part);
if (!part) {
// The parts don't intersect
return undefined;
}
const context = inner.combineContext(outer.context);
const context = inner.combineContext(outer);
return new Hap(whole, part, inner.value, context);
}
innerHaps.map(innerHap => munge(outerHap,innerHap))
return innerHaps.map(innerHap => munge(outerHap, innerHap))
}
const flattened = haps.map((x) => x.withEvent(flatHap));
return flattened.filter(x => x);
const result = flatten(haps.map(flatHap));
// remove undefineds
return result.filter(x => x);
}
return new Pattern(query);
}
// squeezeJoin :: Pattern (Pattern a) -> Pattern a

View File

@ -33,6 +33,7 @@ import {
square2,
tri,
tri2,
id,
} from '../strudel.mjs';
//import { Time } from 'tone';
import pkg from 'tone';
@ -489,4 +490,12 @@ describe('Pattern', function() {
)
})
})
describe("squeezeJoin", () => {
it("Can squeeze", () => {
assert.deepStrictEqual(
sequence("a", ["a","a"]).fmap(a => fastcat("b", "c")).squeezeJoin().firstCycle(),
sequence(["b", "c"],[["b", "c"],["b", "c"]]).firstCycle()
)
})
})
})