import { Sequence } from '../../core';
import { compose } from '../../../../helper/compose';
compose(Sequence, class extends Sequence {
public override scanl(f: (b: b, a: a) => b, z: b): Sequence, number]> {
return new Sequence, number]>(([prev, iter, i] = [z, () => this.iterate(), 0]) =>
Sequence.Iterator.when, number]>>(
iter(),
() =>
i === 0
? Sequence.Data.cons(z)
: Sequence.Data.cons(),
thunk =>
Sequence.Data.cons, number]>(
prev = f(prev, Sequence.Thunk.value(thunk)),
[prev, Sequence.Thunk.iterator(thunk), Sequence.Thunk.index(thunk) + 1])));
}
});