import { Predicate, AsyncPredicate, Mapper, AsyncMapper, Reducer, AsyncReducer, Comparer, Action, AsyncAction, Group, Indexed } from './types';
declare function toArray<T>(iterable: Iterable<T>): T[];
declare function withIndex<T>(iterable: Iterable<T>): Iterable<Indexed<T>>;
declare function takeWhile<T>(iterable: Iterable<T>, condition: Predicate<T>): Iterable<T>;
declare function takeWhileAsync<T>(iterable: Iterable<T>, condition: AsyncPredicate<T>): AsyncIterable<T>;
declare function take<T>(iterable: Iterable<T>, n: number): Iterable<T>;
declare function skipWhile<T>(iterable: Iterable<T>, condition: Predicate<T>): Iterable<T>;
declare function skipWhileAsync<T>(iterable: Iterable<T>, condition: AsyncPredicate<T>): AsyncIterable<T>;
declare function skip<T>(iterable: Iterable<T>, n: number): Iterable<T>;
declare function map<T, R>(iterable: Iterable<T>, mapper: Mapper<T, R>): Iterable<R>;
declare function mapAsync<T, R>(iterable: Iterable<T>, mapper: AsyncMapper<T, R>): AsyncIterable<R>;
declare function filter<T>(iterable: Iterable<T>, predicate: Predicate<T>): Iterable<T>;
declare function filterAsync<T>(iterable: Iterable<T>, predicate: AsyncPredicate<T>): AsyncIterable<T>;
declare function partition<T>(iterable: Iterable<T>, size: number): Iterable<Iterable<T>>;
declare function append<T>(iterable: Iterable<T>, item: T): Iterable<T>;
declare function prepend<T>(iterable: Iterable<T>, item: T): Iterable<T>;
declare function concat<T>(...iterables: Array<Iterable<T>>): Iterable<T>;
declare function repeat<T>(iterable: Iterable<T>, n: number): Iterable<T>;
declare function flatten<T, R>(iterable: Iterable<T>, mapper?: Mapper<T, Iterable<R>>): Iterable<R>;
declare function flattenAsync<T, R>(iterable: Iterable<T>, mapper: AsyncMapper<T, Iterable<R>>): AsyncIterable<R>;
declare function sort<T>(iterable: Iterable<T>, comparer?: Comparer<T>): Iterable<T>;
declare function distinct<T, R>(iterable: Iterable<T>, mapper?: Mapper<T, R>): Iterable<T>;
declare function distinctAsync<T, R>(iterable: Iterable<T>, mapper: AsyncMapper<T, R>): AsyncIterable<T>;
declare function group<T, R>(iterable: Iterable<T>, mapper: Mapper<T, R>): Iterable<Group<T, R>>;
declare function groupAsync<T, R>(iterable: Iterable<T>, mapper: AsyncMapper<T, R>): AsyncIterable<Group<T, R>>;
declare function count<T>(iterable: Iterable<T>, predicate?: Predicate<T>): number;
declare function countAsync<T>(iterable: Iterable<T>, predicate: AsyncPredicate<T>): Promise<number>;
declare function first<T>(iterable: Iterable<T>, predicate?: Predicate<T>): T | undefined;
declare function firstAsync<T>(iterable: Iterable<T>, predicate: AsyncPredicate<T>): Promise<T | undefined>;
declare function last<T>(iterable: Iterable<T>, predicate?: Predicate<T>): T | undefined;
declare function lastAsync<T>(iterable: Iterable<T>, predicate: AsyncPredicate<T>): Promise<T | undefined>;
declare function reduceAndMap<T, A, R>(iterable: Iterable<T>, reducer: Reducer<T, A>, initial: A, result: Mapper<A, R>): R;
declare function reduceAndMapAsync<T, A, R>(iterable: Iterable<T>, reducer: AsyncReducer<T, A>, initial: A, result: AsyncMapper<A, R>): Promise<R>;
declare function reduce<T, R>(iterable: Iterable<T>, reducer: Reducer<T, R>, initial: R): R;
declare function reduceAsync<T, R>(iterable: Iterable<T>, reducer: AsyncReducer<T, R>, initial: R): Promise<R>;
declare function all<T>(iterable: Iterable<T>, predicate: Predicate<T>): boolean;
declare function allAsync<T>(iterable: Iterable<T>, predicate: AsyncPredicate<T>): Promise<boolean>;
declare function any<T>(iterable: Iterable<T>, predicate?: Predicate<T>): boolean;
declare function anyAsync<T>(iterable: Iterable<T>, predicate: AsyncPredicate<T>): Promise<boolean>;
declare function contains<T>(iterable: Iterable<T>, item: T): boolean;
declare function toObject<T, R>(iterable: Iterable<T>, keySelector: Mapper<T, string>, valueSelector?: Mapper<T, unknown>): R;
declare function toObjectAsync<T, R>(iterable: Iterable<T>, keySelector: AsyncMapper<T, string>, valueSelector: AsyncMapper<T, unknown>): Promise<R>;
declare function toAsync<T>(iterable: Iterable<T>): AsyncIterable<T>;
declare function forEach<T>(iterable: Iterable<T>, action: Action<T>): void;
declare function forEachAsync<T>(iterable: Iterable<T>, action: AsyncAction<T>): Promise<void>;
declare function execute<T>(iterable: Iterable<T>, action: Action<T>): Iterable<T>;
declare function executeAsync<T>(iterable: Iterable<T>, action: AsyncAction<T>): AsyncIterable<T>;
declare function join<T>(iterable: Iterable<T>, separator: string, mapper?: Mapper<T, string>): string;
declare function joinAsync<T>(iterable: Iterable<T>, separator: string, mapper: AsyncMapper<T, string>): Promise<string>;
declare function sum<T>(iterable: Iterable<T>, mapper?: Mapper<T, number>): number;
declare function sumAsync<T>(iterable: Iterable<T>, mapper: AsyncMapper<T, number>): Promise<number>;
declare function avg<T>(iterable: Iterable<T>, mapper?: Mapper<T, number>): number;
declare function avgAsync<T>(iterable: Iterable<T>, mapper: AsyncMapper<T, number>): Promise<number>;
declare function top<T, R>(iterable: Iterable<T>, mapper: Mapper<T, R>, comparer: Comparer<R>): T | undefined;
declare function topAsync<T, R>(iterable: Iterable<T>, mapper: AsyncMapper<T, R>, comparer: Comparer<R>): Promise<T | undefined>;
declare function min<T>(iterable: Iterable<T>, mapper?: Mapper<T, number>): T | undefined;
declare function minAsync<T>(iterable: Iterable<T>, mapper: AsyncMapper<T, number>): Promise<T | undefined>;
declare function max<T>(iterable: Iterable<T>, mapper?: Mapper<T, number>): T | undefined;
declare function maxAsync<T>(iterable: Iterable<T>, mapper: AsyncMapper<T, number>): Promise<T | undefined>;
export { withIndex, takeWhile, takeWhileAsync, take, skipWhile, skipWhileAsync, skip, map, mapAsync, filter, filterAsync, partition, append, prepend, concat, repeat, flatten, flattenAsync, sort, distinct, distinctAsync, group, groupAsync, count, countAsync, first, firstAsync, last, lastAsync, reduceAndMap, reduceAndMapAsync, reduce, reduceAsync, all, allAsync, any, anyAsync, contains, toArray, toObject, toObjectAsync, toAsync, forEach, forEachAsync, execute, executeAsync, join, joinAsync, sum, sumAsync, avg, avgAsync, top, topAsync, min, minAsync, max, maxAsync, };
