import { Sequence } from '../../core'; import { compose } from '../../../../helper/compose'; compose(Sequence, class extends Sequence { public override filter(f: (a: a, i: number) => boolean): Sequence> { return new Sequence>((iter = () => this.iterate(), cons) => Sequence.Iterator.when( iter(), () => cons(), (thunk, recur) => f(Sequence.Thunk.value(thunk), Sequence.Thunk.index(thunk)) ? cons(Sequence.Thunk.value(thunk), Sequence.Thunk.iterator(thunk)) : recur())); } });