code: func (obj *object) Compare(other Value) int {
  	o1 := sortOrder(obj)
  	o2 := sortOrder(other)
  	if o1 < o2 {
  		return -1
  	} else if o2 < o1 {
  		return 1
  	}
  	a := obj
  	b := other.(*object)
  	keysA := a.Keys()
  	keysB := b.Keys()
  	sort.Sort(termSlice(keysA))
  	sort.Sort(termSlice(keysB))
  	minLen := a.Len()
  	if b.Len() < a.Len() {
  		minLen = b.Len()
  	}
  	for i := 0; i < minLen; i++ {
  		keysCmp := Compare(keysA[i], keysB[i])
  		if keysCmp < 0 {
  			return -1
  		}
  		if keysCmp > 0 {
  			return 1
  		}
  		valA := a.Get(keysA[i])
  		valB := b.Get(keysB[i])
  		valCmp := Compare(valA, valB)
  		if valCmp != 0 {
  			return valCmp
  		}
  	}
  	if a.Len() < b.Len() {
  		return -1
  	}
  	if b.Len() < a.Len() {
  		return 1
  	}
  	return 0
  }
docs: // Compare compares obj to other, return <0, 0, or >0 if it is less than, equal to,
  // or greater than other.