func (o *ObjectDataType) IsEquivalent(other DataType) bool {
	a, ok := other.(*ObjectDataType)
	if !ok {
		return false
	}
	if o.TypeName != a.TypeName {
		return false
	}
	if len(o.Fields) != len(a.Fields) {
		return false
	}
	for i, f := range o.Fields {
		if !f.IsEquivalent(a.Fields[i]) {
			return false
		}
	}
	return true
}
func (o *ObjectDataType) IsEquivalent(other DataType) bool {
	a, ok := other.(*ObjectDataType)
	if !ok {
		return false
	}
	if o.TypeName != a.TypeName {
		return false
	}
	if len(o.Fields) != len(a.Fields) {
		return false
	}
	for i, f := range o.Fields {
		if !f.IsEquivalent(a.Fields[i]) {
			return false
		}
	}
	return true
}
// IsEquivalent returns true if other represents the same data type as the target.