class LazyIterableIterator { constructor(producer) { this.producer = producer; } [Symbol.iterator]() { if (this.it === undefined) { this.it = this.producer(); } return this.it; } next() { if (this.it === undefined) { this.it = this.producer(); } return this.it.next(); } } export function makeLazy(producer) { return new LazyIterableIterator(producer); }