code: func (v variableValue) compare(rhs variableValue) int {
  	if v.I != nil {
  		if rhs.I != nil {
  			// Both integers.
  			if *v.I < *rhs.I {
  				return 1
  			} else if *v.I > *rhs.I {
  				return -1
  			}
  			return 0
  		} else if rhs.S != nil {
  			// int vs string
  			return 1
  		}
  		// int vs Unbound.
  		return -1
  	} else if v.S != nil {
  		if rhs.S != nil {
  			// Both strings.
  			if *v.S < *rhs.S {
  				return 1
  			} else if *v.S > *rhs.S {
  				return -1
  			}
  			return 0
  		}
  		// string vs (int | unbound)
  		return -1
  	} else if rhs.isBound() {
  		// unbound vs (int|string)
  		return 1
  	}
  	// unbound vs unbound
  	return 0
  }
docs: // compare returns 0 if equal, 1 if lhs < right, else -1.
  // Order: unbound < 1 < 2 < "abc" < "cde" .