import _curry2 from './internal/_curry2';
import curryN from './curryN';


/**
 * Returns a function of arity `n` from a (manually) curried function.
 *
 * @func
 * @memberOf R
 * @since v0.14.0
 * @category Function
 * @sig Number -> (a -> b) -> (a -> c)
 * @param {Number} length The arity for the returned function.
 * @param {Function} fn The function to uncurry.
 * @return {Function} A new function.
 * @see R.curry
 * @example
 *
 *      const addFour = a => b => c => d => a + b + c + d;
 *
 *      const uncurriedAddFour = R.uncurryN(4, addFour);
 *      uncurriedAddFour(1, 2, 3, 4); //=> 10
 */
var uncurryN = _curry2(function uncurryN(depth, fn) {
  return curryN(depth, function() {
    var currentDepth = 1;
    var value = fn;
    var idx = 0;
    var endIdx;
    while (currentDepth <= depth && typeof value === 'function') {
      endIdx = currentDepth === depth ? arguments.length : idx + value.length;
      value = value.apply(this, Array.prototype.slice.call(arguments, idx, endIdx));
      currentDepth += 1;
      idx = endIdx;
    }
    return value;
  });
});
export default uncurryN;

@@ -143,16 +143,168 @@
 nction.%0A
+ * Note that, the returned function is actually a ramda style%0A * curryied function, which can accept one or more arguments in each%0A * function calling.%0A
  *%0A * @f
@@ -391,20 +391,50 @@
 -%3E b
+ -%3E c ... -%3E z
 ) -%3E 
+(
 (a -%3E 
-c
+b -%3E c ...) -%3E z
 )%0A *
@@ -596,16 +596,26 @@
  R.curry
+, R.curryN
 %0A * @exa

add note: uncurryN actually return a ramda style curried function. (#2939)