This site is updated infrequently. For up-to-date information, please visit the new OCaml website at ocaml.org.

Coercion of arrays of objects (and some other containers)
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
 Date: 2005-04-13 (14:11) From: Olivier Andrieu Subject: Re: [Caml-list] Coercion of arrays of objects (and some other containers)
``` Matthieu Dubuget [Wed, 13 Apr 2005]:
> I'm sorry, but I feel stupid.
>
> The variance and covariance terms/notions appear often in this
> list, and seems to be very basic notions.
>
> I tried to find explanation on internet but did not succeed.
>
> Could somebody point me some links  to understand, please?

I do not have a link but the idea (as I understand it) is simple :

This concerns parameterized types ('a t) and how a subtyping relation
on the parameter can yield a subtyping relation on the type.

When the parameter is covariant :
if a is a subtype of b then a t is a subtype of b t

When the parameter is contravariant :
if a is a subtype of b then b t is a subtype of a t

For instance lists are covariant. [`A|`B|`C] is a supertype of [`A|`B]
so a [`A|`B|`C] list is a supertype of [`A|`B] list.

Function arguments are contravariant : ([`A|`B] -> unit) is a
supertype of ([`A|`B|`C] -> unit). When you have a function that
accepts A B or C, you can also view it as a function that accepts just
A or B (qui peut le plus peut le moins).

Records with mutable fields (or arrays) are neither covariant nor
contravariant.

Well maybe my terminology isn't quite correct but I hope you get the
idea.

--
Olivier

```