Type Systems: Covariance, Contravariance, Bivariance, and Invariance explained (www.reddit.com)