Parametrizing code with types will be part of almost every future statically typed language. I think any programmer serious about working with static typing needs to have an understanding of the conceptual territory:
- What does Type Variance mean?
- Covariance versus Contravariance
- Definition-site versus Use-site Variance
I recommend Barry Kelly’s post as an nice summary of the issues: