import { addIndex, reduce } from 'ramda';
/**
* {@link http://ramdajs.com/docs/#reduce|R.reduce} function that more closely resembles Array.prototype.reduce.
* It takes two new parameters to its callback function: the current index, and the entire list.
*
* `reduceIndexed` implementation is simple : `
* const reduceIndexed = R.addIndex(R.reduce);
* `
* @func reduceIndexed
* @memberOf RA
* @since {@link https://char0n.github.io/ramda-adjunct/2.5.0|v2.5.0}
* @category List
* @typedef Idx = Number
* @sig ((a, b, Idx, [b]) => a) -> a -> [b] -> a
* @param {Function} fn The iterator function. Receives four values,
* the accumulator, the current element from the array, index and the entire list
* @param {*} acc The accumulator value
* @param {Array} list The list to iterate over
* @return {*} The final, accumulated value
* @see {@link http://ramdajs.com/docs/#addIndex|R.addIndex}, {@link http://ramdajs.com/docs/#reduce|R.reduce}
* @example
*
* const initialList = ['f', 'o', 'o', 'b', 'a', 'r'];
*
* reduceIndexed((acc, val, idx, list) => acc + '-' + val + idx, '', initialList);
* //=> "-f0-o1-o2-b3-a4-r5"
*/
const reduceIndexed = addIndex(reduce);
export default reduceIndexed;