whole_func_string: function curryN (fn, executeArity) {
          var curriedArgs = restArgs(arguments, 2);
          return function () {
              var args = argsToArray(arguments),
                  concatedArgs = replacePlaceHolders(curriedArgs, args),
                  placeHolders = concatedArgs.filter(isPlaceholder),
                  canBeCalled = (concatedArgs.length - placeHolders.length >= executeArity) || !executeArity;
              return !canBeCalled ? curryN.apply(null, [fn, executeArity].concat(concatedArgs)) :
                  fn.apply(null, concatedArgs);
          };
      }
func_code_string: function curryN (fn, executeArity) {
          var curriedArgs = restArgs(arguments, 2);
          return function () {
              var args = argsToArray(arguments),
                  concatedArgs = replacePlaceHolders(curriedArgs, args),
                  placeHolders = concatedArgs.filter(isPlaceholder),
                  canBeCalled = (concatedArgs.length - placeHolders.length >= executeArity) || !executeArity;
              return !canBeCalled ? curryN.apply(null, [fn, executeArity].concat(concatedArgs)) :
                  fn.apply(null, concatedArgs);
          };
      }
func_documentation_string: Curries a function and only executes the function when the arity reaches the .
  @function module:sjl.curryN
  @param fn - Function to curry.
  @param executeArity - Arity at which to execute curried function.
  @throws {TypeError} - If `fn` is not a function.