export interface IIterator { hasNext(): boolean; next(): T | E; forEachRemaining(callback: (element: T) => void): void; remove?(): T | E; reset?(): void; [Symbol.iterator](): IterableIterator; getIterableIterator(): IterableIterator; }