Version française
Home     About     Download     Resources     Contact us    

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

Browse thread
[Caml-list] [Q]: Co(ntra)variance and subtyping?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Clemens Hintze <cle-ocaml@q...>
Subject: [Caml-list] Re: [Q]: Co(ntra)variance and subtyping?

let me first thank you for trying to answer my question. But
unfortunately I am still not convinced, that I properly understood it

On Sun, Nov 18, 2001 at 01:18:22AM +1100, Mark Wotton wrote:
> On Fri, 16 Nov 2001, Clemens Hintze wrote:
> > Two things I would like to ask you right now:
> > 
> > - What does subtyping exactly mean in OCaml resp. functional
> >   programming?
> > - What means covariance and contravariance of types and subtypes?
> Not being an Ocaml guru, I shan't attempt the first question.
> The second's pretty easy, though: covariance is the sane way of doing OO,
> and contravariance is bizarre. (Right, if there's any Eiffel devotees on
> here, I've just started a flamewar. :)

I am not a Eiffel devotee, so nothing to fear here from me ;-)

> Seriously: contravariance breaks the assumption that a subtype is capable
> of everything that its parent can do. Essentially, it allows you to narrow
> arguments to functions: to use some weird eiffelish pseudocode i had
> lying around, you can do this.

As I have understood, co(ntra)variance has someting to do with types
and not with classes, right? And classes in OCaml are not types, right

So it should not an issue about subclassing, if I understood
correctly. So there has to be more about these, as only in area of
OOP, shouldn't it?

I can understand your explanation, though, but I fear that there is
something more that is not covered by this example. What I have found
during investigating this question via google and the mailinglist
archive was this:

- Covariance means that a specialized class also specialize the
  arguments of overloaded methods. You use 'narrow' instead of
  'specializing' ...
- Contravariance, however, is generalizing arguments of overloaded
  methods in specialized classes.

So in this light, your example should demonstrate covariance, isn't
it? But what I do not like in the explanation above, is that it also
only refer to OOP and not types. 

Another explanation I've found, was (a --> b means a subtypes b):

- Covariance means, that if t' --> t ==> t' list --> t list
- Contravariance, however, if t' --> t ==> t list --> t' list

This explanation is not based on OOP, fine! But to be honest, I do not
understand this explanation nor its consequences. I would not be able
right now, to build an example describing this above ... :-(

And then there is still the term 'invariance' that I've even not asked
so far (hoping it will explain itself if I had understand the other
variances so far) :-/

So I need the explanation about type, subtype, co(ntra)variance,
invariance and all these in OO and non-OO in OCaml.

> It's an odd thing: most of the posts with apologies for bad English I've
> seen on Usenet have been flawless as far as composition goes.

Thank you for this :-)

I know that my english should be good enough for being understood. But
sometimes, some wrong phrases seem to spring in, and other feel
necessary to flame me, then. So if I am new to a group, I want to
state, that I am not a native speaker, hoping others will be mercy
instead of flaming me :-)


Clemens Hintze  mailto:
Bug reports:  FAQ:
To unsubscribe, mail  Archives: