code: function (f) {
        // equivalent to arguments.slice(1)
        // starting at 1 because 0 is the f, makes things tricky.
        // Pay attention to what variable is where, and the -1 magic.
        // thankfully, we have tests for this.
        var args = new Array(arguments.length - 1);
        for (var i = 1; i < arguments.length; i++) args[i-1] = arguments[i];
  
        return function () {
          var newArgs = new Array(arguments.length);
          for (var j = 0; j < newArgs.length; j++) newArgs[j] = arguments[j];
  
          var all = args.concat(newArgs);
          return f.apply(null, all);
        };
      }
docs: Don't use array slice(arguments), makes the whole function unoptimisable on Chrome