import type { Awaitable, IsomorphicIterable, Unary } from "@lou.codes/types";
/**
 * Reducer function for iterables and asynchronous iterables.
 *
 * @category Asynchronous Reducers
 * @example
 * ```typescript
 * const sum = Accumulator<number>(item => total => total + item);
 * const sumFrom0 = sum(0);
 *
 * sumFrom0([1, 2, 3]); // 6
 * ```
 * @param reducer Reducer function.
 * @returns Curried function with `reducer` in context.
 */
export declare const reduce: <Item, Accumulator>(
	reducer: Unary<Item, Unary<Accumulator, Awaitable<Accumulator>>>,
) => (
	initialValue: Accumulator,
) => <Iterable extends IsomorphicIterable<Item>>(
	iterable: Iterable,
) => Iterable extends AsyncIterable<unknown> ? Promise<Accumulator>
:	Accumulator;
