Covariance and contravariance explained without code | Hacker News Reader