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