code: function dualVarArgs(fun) {
                  return function () {
                      var args = Array.prototype.slice.apply(arguments);
  
                      function isArray(obj) {
                          return Object.prototype.toString.call(obj) === '[object Array]';
                      }
  
                      // if it's just one argument and is an array then take the
                      // array as the list of arguments
                      // otherwise use all the arguments as the list of arguments
                      if (args.length === 1 && isArray(args[0])) {
                          args = args[0];
                      }
  
                      return fun(args);
                  };
              }
docs: return a function that can take a list of args as first parameter or spliced, if it takes just one argument and is an array use that as the list, otherwise collect the arguments and use that as the list examples: foo([1,2,3]) === foo(1,2,3)