<P> In a subclassing hierarchy, the intersection of a type and an ancestor type (such as its parent) is the most derived type . The intersection of sibling types is empty . </P> <P> The Forsythe language includes a general implementation of intersection types . A restricted form is refinement types . </P> <P> Union types are types describing values that belong to either of two types . For example, in C, the signed char has a - 128 to 127 range, and the unsigned char has a 0 to 255 range, so the union of these two types would have an overall "virtual" range of - 128 to 255 that may be used partially depending on which union member is accessed . Any function handling this union type would have to deal with integers in this complete range . More generally, the only valid operations on a union type are operations that are valid on both types being unioned. C's "union" concept is similar to union types, but is not typesafe, as it permits operations that are valid on either type, rather than both . Union types are important in program analysis, where they are used to represent symbolic values whose exact nature (e.g., value or type) is not known . </P> <P> In a subclassing hierarchy, the union of a type and an ancestor type (such as its parent) is the ancestor type . The union of sibling types is a subtype of their common ancestor (that is, all operations permitted on their common ancestor are permitted on the union type, but they may also have other valid operations in common). </P>

The data type of variable are checked at compile time is called as