import { Sequence } from '../../core';
import { compose } from '../../../../helper/compose';
compose(Sequence, class extends Sequence {
public override foldr(f: (a: a, b: Sequence) => Sequence, z: Sequence): Sequence>, Sequence.Iterator]> {
return new Sequence, Sequence.Iterator>((iter = () => this.reduce().iterate()) =>
Sequence.Iterator.when(
iter(),
() =>
Sequence.Data.cons(z),
thunk =>
Sequence.Data.cons(
f(
Sequence.Thunk.value(thunk),
Sequence.resume(Sequence.Thunk.iterator(thunk))
.foldr(f, z)))))
.bind(s => s);
}
});