When one type may be cast into another / has a subtype relationship with another type. Extremely common in OOP languages, rarer in functional programming languages. Also fairly common in the context of row types (i.e. extensible records) or other contexts where structural types are present.