import createWrap from './.internal/createWrap.js' /** Used to compose bitmasks for function metadata. */ const WRAP_CURRY_FLAG = 8 /** * Creates a function that accepts arguments of `func` and either invokes * `func` returning its result, if at least `arity` number of arguments have * been provided, or returns a function that accepts the remaining `func` * arguments, and so on. The arity of `func` may be specified if `func.length` * is not sufficient. * * The `curry.placeholder` value, which defaults to `_` in monolithic builds, * may be used as a placeholder for provided arguments. * * **Note:** This method doesn't set the "length" property of curried functions. * * @since 2.0.0 * @category Function * @param {Function} func The function to curry. * @param {number} [arity=func.length] The arity of `func`. * @returns {Function} Returns the new curried function. * @example * * const abc = function(a, b, c) { * return [a, b, c] * } * * const curried = curry(abc) * * curried(1)(2)(3) * // => [1, 2, 3] * * curried(1, 2)(3) * // => [1, 2, 3] * * curried(1, 2, 3) * // => [1, 2, 3] * * // Curried with placeholders. * curried(1)(_, 3)(2) * // => [1, 2, 3] */ function curry(func, arity) { const result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity) result.placeholder = curry.placeholder return result } // Assign default placeholders. curry.placeholder = {} export default curry