code: func (it *Comparison) doComparison(val graph.Value) bool {
  	qval := it.qs.NameOf(val)
  	switch cVal := it.val.(type) {
  	case quad.Int:
  		if cVal2, ok := qval.(quad.Int); ok {
  			return RunIntOp(cVal2, it.op, cVal)
  		}
  		return false
  	case quad.Float:
  		if cVal2, ok := qval.(quad.Float); ok {
  			return RunFloatOp(cVal2, it.op, cVal)
  		}
  		return false
  	case quad.String:
  		if cVal2, ok := qval.(quad.String); ok {
  			return RunStrOp(string(cVal2), it.op, string(cVal))
  		}
  		return false
  	case quad.BNode:
  		if cVal2, ok := qval.(quad.BNode); ok {
  			return RunStrOp(string(cVal2), it.op, string(cVal))
  		}
  		return false
  	case quad.IRI:
  		if cVal2, ok := qval.(quad.IRI); ok {
  			return RunStrOp(string(cVal2), it.op, string(cVal))
  		}
  		return false
  	case quad.Time:
  		if cVal2, ok := qval.(quad.Time); ok {
  			return RunTimeOp(time.Time(cVal2), it.op, time.Time(cVal))
  		}
  		return false
  	default:
  		return RunStrOp(quad.StringOf(qval), it.op, quad.StringOf(it.val))
  	}
  }
docs: // Here's the non-boilerplate part of the ValueComparison iterator. Given a value
  // and our operator, determine whether or not we meet the requirement.