Ahhhh, *variance.
The definitive explanation of why inheritance should always be avoided in favour of implementation of abstract interfaces.
The definitive explanation of why inheritance should always be avoided in favour of implementation of abstract interfaces.
I see that many OOP languages (of various purity) have interfaces that may be extended by other interfaces. Is that what you're talking about?
I also found that *variance is used in the context of Haskell, but it seems to be far from being widely used.
Haskell being my template of a language with a good-looking interplay of polymorphism and algebraic typing.