import { Sequence } from '../../core'; import { compose } from '../../../../helper/compose'; compose(Sequence, class extends Sequence { public static override concat(as: Sequence, unknown>): Sequence>, Sequence.Iterator]> { return new Sequence>, Sequence.Iterator]>(([ai, bi] = [() => as.iterate(), Sequence.Iterator.done], cons) => Sequence.Iterator.when( ai(), () => cons(), (at, ar) => ( bi = bi === Sequence.Iterator.done ? () => Sequence.Thunk.value(at).iterate() : bi, Sequence.Iterator.when( bi(), () => (bi = Sequence.Iterator.done, ar()), bt => cons(Sequence.Thunk.value(bt), [() => at, Sequence.Thunk.iterator(bt)]))))); } });