import { Sequence } from '../../core'; import { compose } from '../../../../helper/compose'; compose(Sequence, class extends Sequence { public static override cycle(as: Iterable): Sequence>]> { return new Sequence, number]>( function cycle( [iter, i] = [as[Symbol.iterator](), 0], cons, ): Sequence.Data, number]> { const result = iter.next(); return result.done ? cycle([as[Symbol.iterator](), i + 1], cons) : cons(result.value, [iter, i + 1] as [Iterator, number]); }) .reduce(); } });