import { Sequence } from '../../core'; import { compose } from '../../../../helper/compose'; compose(Sequence, class extends Sequence { public static override zip(a: Sequence, b: Sequence): Sequence<[a, b], [Sequence.Iterator, Sequence.Iterator]> { return new Sequence<[a, b], [Sequence.Iterator, Sequence.Iterator]>(([ai, bi] = [() => a.iterate(), () => b.iterate()], cons) => Sequence.Iterator.when( ai(), () => cons(), at => Sequence.Iterator.when( bi(), () => cons(), bt => cons([Sequence.Thunk.value(at), Sequence.Thunk.value(bt)], [Sequence.Thunk.iterator(at), Sequence.Thunk.iterator(bt)])))); } });