Hacker News new | ask | show | jobs
by pathikrit 3248 days ago
My quick and dirty tl;dr: https://gist.github.com/pathikrit/a7845f72645159646fdb632bc3...

Let C<A> be a higher-kinded type e.g. in List<Animal>, List is C and Animal is A.

Let S be a subtype of T e.g. in class Cat extends Animal, Cat is S and Animal is T

If C<S> is a subtype of C<T>, then C is covaraint on T e.g. List<Cat> is a subtype of List<Animal>

If C<T> is a subtype of C<S>, then C is contravariant on T e.g. Predicate<Animal> is a subtype of Predicate<Cat>

If neither C<T> and nor C<S> are subtypes of the other, thenC is invariant on T