import type { IEnumerable } from './enumerable'; import type { IEnumerator } from './enumerator'; export declare type Predicate = (source: T, ...args: A) => boolean; export declare type JoinResultSelector = (outer: TOuter, inner: TInner) => TResult; export declare type GroupByResultSelector = (key: TKey, elements: IEnumerable) => TResult; export declare type Action = (source: T) => void; export declare class ResultSelector { static get default(): ResultSelector; } export interface ResultSelector { (source: TSource): TResult; } export interface ResultSelectorWithIndex { (source: TSource, index?: number): TResult; } export interface Comparer { (element: TSource, compareTo: TCompareTo): number; } export declare class Comparer { static get default(): Comparer; } export interface EqualityComparer { (x: T, y: T): boolean; } export declare class EqualityComparer { static get default(): EqualityComparer; } export declare type IteratorType> = { prototype: { [Symbol.iterator](): T; }; } & Function; export declare type IteratorFunction = Iterator> = () => R; export declare type EnumerableSource = IEnumerator | Iterable | IteratorFunction; export declare type Nil = null | undefined;