import { curry } from '@typed/lambda'
/**
* Reduce over a list of values.
* @param f :: (b -> a -> b)
* @param seed :: b
* @param list :: [a]
* @returns :: b
*/
export const reduce = curry(
(fn: (accumulator: B, value: A, index: number) => B, seed: B, list: ReadonlyArray): B =>
list.reduce(fn, seed),
) as {
(fn: (accumulator: B, value: A, index: number) => B, seed: B, list: ReadonlyArray): B
(fn: (accumulator: B, value: A, index: number) => B, seed: B): (list: ReadonlyArray) => B
(fn: (accumulator: B, value: A, index: number) => B): {
(seed: B, list: ReadonlyArray): B
(seed: B): (list: ReadonlyArray) => B
}
}