docs: function curry(f) {
      var a = function() {
          var g = bind(f).apply(f, [this].concat(rest(arguments)));
  
          if(!functionLength(g)) return g();
          else return curry(g);
      };
  
      /*
         Let's try and associate all curried functions with the same name as the originator.
         Can't override length but can set _length for currying
      */
      a._name = functionName(f);
      a._length = functionLength(f);
  
      return a;
  }