whole_func_string: function() {
        var fn = this, curried = multiArgs(arguments);
        return function() {
          var args = multiArgs(arguments);
          curried.forEach(function(arg, index) {
            if(arg != null || index >= args.length) args.splice(index, 0, arg);
          });
          return fn.apply(this, args);
        }
      }
func_code_string: function() {
        var fn = this, curried = multiArgs(arguments);
        return function() {
          var args = multiArgs(arguments);
          curried.forEach(function(arg, index) {
            if(arg != null || index >= args.length) args.splice(index, 0, arg);
          });
          return fn.apply(this, args);
        }
      }
func_documentation_string: *
  @method fill(<arg1>, <arg2>, ...)
  @returns Function
  @short Returns a new version of the function which when called will have some of its arguments pre-emptively filled in, also known as "currying".
  @extra Arguments passed to a "filled" function are generally appended to the curried arguments. However, if %undefined% is passed as any of the arguments to %fill%, it will be replaced, when the "filled" function is executed. This allows currying of arguments even when they occur toward the end of an argument list (the example demonstrates this much more clearly).
  @example
  
  var delayOneSecond = setTimeout.fill(undefined, 1000);
  delayOneSecond(function() {
  // Will be executed 1s later
  });
  
  *