Andrei Alexandrescu Wrote:

> Hello,
> 
> 
> Today, overriding functions have covariant return types:
> 
> class A {
>      A clone();
> }
> 
> class B : A {
>      B clone(); // fine, overrides A.clone
> }
> 
> That is entirely principled and cool. Now the entire story is that 
> overriding function may have not only covariant return types, but also 
> contravariant argument types:
> 
> class A {
>      A fun(B);
> }
> 
> class B : A {
>      B fun(A); // fine (in theory), overrides A.fun
> }
> 
> Today D does not support contravariant arguments, but Walter told me 
> once he'd be quite willing to implement them. It is definitely the right 
> thing to do, but Walter would want to see a compelling example before 
> getting to work.
> 
> Is there interest in contravariant argument types? If so, do you know of 
> a killer example?
> 
> 
> Thanks,
> 
> Andrei

Yes please.  Gimme, gimme, gimme.  Andrei and Walter,  you guys are legends.

Currently I'm developing a specialized collection library based on templated 
quantified types.  Such library is useful in pattern matching applications.

Now despite any (negative) comments I may have made on prior occasion regarding 
Scala being too academic re covariance & contravariance, it is difficult 
producing this type of library without language support for covariant and 
contravariant typing.

Designing such support into D would bring even more credibility to the language 
.. especially if you guys can come up with a neat syntax to effect this 
feature.  I'm impressed with the way Walter observed that the ! operator was 
not a binary operator in C/C++ and then went about re-purposing it for template 
syntax.  Accordingly I wouldn't be surprised if you guys pulled another cool 
rabbit-out-of-the-hat trick.

So yes there is extreme interest in my neck of the woods but as for a killer 
example, I need to think this out in more time than this reply makes for at the 
moment.

If you do this, I suspect that it will be the end of my D1 adventures and force 
me into D2.

Cheers
Justin Johansson


Reply via email to