docs: function extendIterablePrototype(prototype) {
      var exclude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  
      // always exclude the constructor
      exclude.push("constructor");
      var ex = exports.Collection.from(exclude);
      // check for conflicts
      var patchProperties = [];
      var _iteratorNormalCompletion26 = true;
      var _didIteratorError26 = false;
      var _iteratorError26 = undefined;
  
      try {
          for (var _iterator26 = Object.getOwnPropertyNames(Object.getPrototypeOf(exports.Collection.empty))[Symbol.iterator](), _step26; !(_iteratorNormalCompletion26 = (_step26 = _iterator26.next()).done); _iteratorNormalCompletion26 = true) {
              var _key2 = _step26.value;
  
              if (!_key2.startsWith('_') && !ex.contains(_key2) && __isFunction(exports.Collection.empty[_key2])) {
                  if (_key2 in prototype) {
                      throw new Error("The method \"" + _key2 + "\" already exists on the \"" + (prototype.constructor && prototype.constructor.name) + "\" prototype. " + "Use the exclude parameter to patch without this method.");
                  } else {
                      patchProperties.push(_key2);
                  }
              }
          }
          // path prototype
      } catch (err) {
          _didIteratorError26 = true;
          _iteratorError26 = err;
      } finally {
          try {
              if (!_iteratorNormalCompletion26 && _iterator26.return) {
                  _iterator26.return();
              }
          } finally {
              if (_didIteratorError26) {
                  throw _iteratorError26;
              }
          }
      }
  
      var _loop4 = function _loop4(_key3) {
          prototype[_key3] = function () {
              var _collection$_key;
  
              var collection = exports.Collection.from(this);
  
              for (var _len2 = arguments.length, args = Array(_len2), _key4 = 0; _key4 < _len2; _key4++) {
                  args[_key4] = arguments[_key4];
              }
  
              return (_collection$_key = collection[_key3]).call.apply(_collection$_key, [collection].concat(args));
          };
      };
  
      var _iteratorNormalCompletion27 = true;
      var _didIteratorError27 = false;
      var _iteratorError27 = undefined;
  
      try {
          for (var _iterator27 = patchProperties[Symbol.iterator](), _step27; !(_iteratorNormalCompletion27 = (_step27 = _iterator27.next()).done); _iteratorNormalCompletion27 = true) {
              var _key3 = _step27.value;
  
              _loop4(_key3);
          }
      } catch (err) {
          _didIteratorError27 = true;
          _iteratorError27 = err;
      } finally {
          try {
              if (!_iteratorNormalCompletion27 && _iterator27.return) {
                  _iterator27.return();
              }
          } finally {
              if (_didIteratorError27) {
                  throw _iteratorError27;
              }
          }
      }
  }