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 } }