code: func (term *Term) Copy() *Term {
  
  	if term == nil {
  		return nil
  	}
  
  	cpy := *term
  
  	switch v := term.Value.(type) {
  	case Null, Boolean, Number, String, Var:
  		cpy.Value = v
  	case Ref:
  		cpy.Value = v.Copy()
  	case Array:
  		cpy.Value = v.Copy()
  	case Set:
  		cpy.Value = v.Copy()
  	case Object:
  		cpy.Value = v.Copy()
  	case *ArrayComprehension:
  		cpy.Value = v.Copy()
  	case *ObjectComprehension:
  		cpy.Value = v.Copy()
  	case *SetComprehension:
  		cpy.Value = v.Copy()
  	case Call:
  		cpy.Value = v.Copy()
  	}
  
  	return &cpy
  }
docs: // Copy returns a deep copy of term.