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); } });