import curry2 from "../function/curry2";
import path from "../object/path";
import _objectForEach from "../internals/_objectForEach";
import _stringWhile from "../internals/_stringWhile";
import always from "../function/always";
/**
* Runs a function for each element of the list, object or string.
*
* @param {function} fn
* @param {any[]|object|string} list
* @returns {undefined}
*/
const forEach = (fn, list) => {
if (typeof path("forEach", list) === "function") {
return list.forEach(fn);
}
if (typeof list === "object") {
return _objectForEach(fn, list);
}
if (typeof list === "string") {
return _stringWhile(always(true), fn, list);
}
throw new Error("Can only use forEach on arrays, objects and strings.");
};
export default curry2(forEach);