code: func (obj object) Merge(other Object) (result Object, ok bool) {
  	result = NewObject()
  	stop := obj.Until(func(k, v *Term) bool {
  		if v2 := other.Get(k); v2 == nil {
  			result.Insert(k, v)
  		} else {
  			obj1, ok1 := v.Value.(Object)
  			obj2, ok2 := v2.Value.(Object)
  			if !ok1 || !ok2 {
  				return true
  			}
  			obj3, ok := obj1.Merge(obj2)
  			if !ok {
  				return true
  			}
  			result.Insert(k, NewTerm(obj3))
  		}
  		return false
  	})
  	if stop {
  		return nil, false
  	}
  	other.Foreach(func(k, v *Term) {
  		if v2 := obj.Get(k); v2 == nil {
  			result.Insert(k, v)
  		}
  	})
  	return result, true
  }
docs: // Merge returns a new Object containing the non-overlapping keys of obj and other. If there are
  // overlapping keys between obj and other, the values of associated with the keys are merged. Only
  // objects can be merged with other objects. If the values cannot be merged, the second turn value
  // will be false.