Disjoint union types are equivalent if their corresponding component types are equivalent. Recursive types are a problem. Type Names Question becomes more interesting because of type names . E.g., As a way of improving program correctness by subdividing values into types according to their meaning within the program . For this to be useful, some structurally equivalent types must be treated as inequivalent .
Most languages use mixed solutions.
C Type Equivalence C uses structural equivalence for array and function types, but name equivalence for struct , union , and enum types. Note this policy avoids problems with recursive types, which can only be built using struct s. The original Pascal definition is vague. Each anonymous type expression defines a new type. E.g., the types of x,y,z are all different, but z and w are the same.