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