docs: function(primaryToken, secondaryToken, comparisonOperator, rootData, scopeData, scopePath) {
      // Evaluate the tokens
      var primarySet = primaryToken.evaluate(rootData, scopeData, scopePath);
      var primaryValues = [];
      for(var p in primarySet) {
        primaryValues.push(primarySet[p].value);
      }
      
      var secondarySet, secondaryValues;
      if(secondaryToken) {
        secondarySet = secondaryToken.evaluate(rootData, scopeData, scopePath);
        secondaryValues = [];
        for(var s in secondarySet) {
          secondaryValues.push(secondarySet[s].value);
        }
      }
      else {
        // No secondary token - just assert based on the primary set
        return SpahQL.DataHelper.truthySet(primaryValues);
      }
      
      var comparisonEval = comparisonOperator.evaluate(rootData, scopeData);
      var comparisonType = comparisonEval[0].value;
      
      // Now run the comparisons
      switch(comparisonType) {
        case SpahQL.Token.ComparisonOperator.COMPARISON_STRICT_EQUALITY:
          return SpahQL.DataHelper.eqSetStrict(primaryValues, secondaryValues);
        case SpahQL.Token.ComparisonOperator.COMPARISON_INEQUALITY:
          return !(SpahQL.DataHelper.eqSetStrict(primaryValues, secondaryValues));
          break;
        case SpahQL.Token.ComparisonOperator.COMPARISON_ROUGH_EQUALITY:
          return SpahQL.DataHelper.eqSetRough(primaryValues, secondaryValues);
          break;
        case SpahQL.Token.ComparisonOperator.COMPARISON_LT:
          return SpahQL.DataHelper.ltSet(primaryValues, secondaryValues);
          break;
        case SpahQL.Token.ComparisonOperator.COMPARISON_GT:
          return SpahQL.DataHelper.gtSet(primaryValues, secondaryValues);
          break;
        case SpahQL.Token.ComparisonOperator.COMPARISON_LTE:
          return SpahQL.DataHelper.lteSet(primaryValues, secondaryValues);
          break;
        case SpahQL.Token.ComparisonOperator.COMPARISON_GTE:
          return SpahQL.DataHelper.gteSet(primaryValues, secondaryValues);
          break;
        case SpahQL.Token.ComparisonOperator.COMPARISON_JOINT_SET:
          return SpahQL.DataHelper.jointSet(primaryValues, secondaryValues);
          break;
        case SpahQL.Token.ComparisonOperator.COMPARISON_DISJOINT_SET:
          return !(SpahQL.DataHelper.jointSet(primaryValues, secondaryValues));
          break;
        case SpahQL.Token.ComparisonOperator.COMPARISON_SUPERSET:
          return SpahQL.DataHelper.superSet(primaryValues, secondaryValues);
          break;
        case SpahQL.Token.ComparisonOperator.COMPARISON_SUBSET:
          return SpahQL.DataHelper.superSet(secondaryValues, primaryValues);
          break;
      }
    }