import { Sequence } from '../../core'; import { compose } from '../../../../helper/compose'; compose(Sequence, class extends Sequence { public override group(f: (x: a, y: a) => boolean): Sequence, a[]]> { return new Sequence, a[]]>(([iter, acc] = [() => this.iterate(), []], cons) => Sequence.Iterator.when( iter(), () => acc.length === 0 ? cons() : cons(acc), (thunk, recur) => acc.length === 0 || f(acc[0], Sequence.Thunk.value(thunk)) ? (acc.push(Sequence.Thunk.value(thunk)), recur()) : cons(acc, [Sequence.Thunk.iterator(thunk), [Sequence.Thunk.value(thunk)]]))); } });