text: 
  var has = require("pop-has");
  
  module.exports = GenericSet;
  function GenericSet() {
      throw new Error("Can't construct. GenericSet is a mixin.");
  }
  
  GenericSet.prototype.isSet = true;
  
  GenericSet.prototype.union = function (that) {
      var union =  this.constructClone(this);
      union.addEach(that);
      return union;
  };
  
  GenericSet.prototype.intersection = function (that) {
      return this.constructClone(this.filter(function (value) {
          return has(that, value);
      }));
  };
  
  GenericSet.prototype.difference = function (that) {
      var union =  this.constructClone(this);
      union.deleteEach(that);
      return union;
  };
  
  GenericSet.prototype.symmetricDifference = function (that) {
      var union = this.union(that);
      var intersection = this.intersection(that);
      return union.difference(intersection);
  };
  
  GenericSet.prototype.equals = function (that, equals) {
      var self = this;
      return (
          that && typeof that.reduce === "function" &&
          this.length === that.length &&
          that.reduce(function (equal, value) {
              return equal && self.has(value, equals);
          }, true)
      );
  };
  
  // W3C DOMTokenList API overlap (does not handle variadic arguments)
  
  GenericSet.prototype.contains = function (value) {
      return this.has(value);
  };
  
  GenericSet.prototype.remove = function (value) {
      return this["delete"](value);
  };
  
  GenericSet.prototype.toggle = function (value) {
      if (this.has(value)) {
          this["delete"](value);
      } else {
          this.add(value);
      }
  };
  
  