@lou.codes/iterables
Version:
🔁 Iterable and AsyncIterable utils
24 lines (23 loc) • 747 B
TypeScript
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;