Covariance and Controvariance: a fresh look at an old issue (a primer in advanced type systems for learning functional programmers) (Logical Methods in Computer Science, 2022)