import { Sequence } from '../../core'; import { compose } from '../../../../helper/compose'; compose(Sequence, class extends Sequence { public override mapM(f: (a: a) => Sequence): Sequence>, Sequence.Iterator]> { return Sequence.from([0]) .bind(() => { const xs = this.extract(); switch (xs.length) { case 0: return Sequence.mempty; default: { const x = xs.shift()!; return f(x) .bind(y => xs.length === 0 ? Sequence.from([[y]]) : Sequence.from(xs).mapM(f).fmap(ys => [y, ...ys])); } } }); } });