import { Sequence } from '../../core'; import { compose } from '../../../../helper/compose'; compose(Sequence, class extends Sequence { public override reduce(): Sequence>]> { return new Sequence>]>( ([i, memo] = [0, new Map>()], cons) => Sequence.Iterator.when( memo.get(i) || memo.set(i, i > 0 && memo.has(i - 1) ? Sequence.Thunk.iterator(memo.get(i - 1)!)() : this.iterate()).get(i)!, () => cons(), thunk => cons(Sequence.Thunk.value(thunk), [i + 1, memo]))); } });