Covariance and contravariance (computer science): Difference between revisions

Content deleted Content added
m Covariant method parameter type: Remove space between references
mNo edit summary
Line 6:
Depending on the variance of the [[type constructor]], the subtyping relation of the simple types may be either preserved, reversed, or ignored for the respective complex types. In the [[OCaml]] programming language, for example, "list of Cat" is a subtype of "list of Animal" because the list type constructor is '''covariant'''. This means that the subtyping relation of the simple types are preserved for the complex types.
 
On the other hand, "function from Animal to String" is a subtype of "function from Cat to String" because the function type constructor is '''contravariant''' in the parameter type. Here, the subtyping relation of the simple types is reversed for the complex types.
 
A programming language designer will consider variance when devising typing rules for language features such as arrays, inheritance, and [[generic datatype]]s. By making type constructors covariant or contravariant instead of invariant, more programs will be accepted as well-typed. On the other hand, programmers often find contravariance unintuitive, and accurately tracking variance to avoid runtime type errors can lead to complex typing rules.