import always from "../function/always";
import curry from "../function/curry";
import reduceWhile from "./reduceWhile";
/**
* Reduces a list, object or string to a single value output value.
* The reducer function receives the following arguments `(accumulator, currentValue, key, list)`,
* where `list` is the whole list, object or string.
*
* @param {function} func
* @param {any} initialValue
* @param {any[]|object|string} list
* @returns {any}
*/
const reduce = (func, initialValue, list) =>
reduceWhile(always(true), func, initialValue, list);
export default curry(reduce);