I really don't understand the audience for whom this is written. If it is aimed at Scala programmers, why are half the examples in Haskell? If it not aimed at Scala programmers, why is it on the Typelevel blog?
In addition to the Scala / Haskell issue none of the sections nor the introduction do a good job of stating the main point up-front. Use signposts! Write in inverted pyramid style! Etc.
E.g. Section "Higher kinded Leibniz" I would rather start with something like
"Can we use Leibniz on higher kinded types? For example, can we establish an equality between List[_] and some type A[_]? It turns out we can..."
Say up front what the section is about. Motivate it with an example. Then get into the details.
Hopefully this will be taken as constructive criticism.
In addition to the Scala / Haskell issue none of the sections nor the introduction do a good job of stating the main point up-front. Use signposts! Write in inverted pyramid style! Etc.
E.g. Section "Higher kinded Leibniz" I would rather start with something like
"Can we use Leibniz on higher kinded types? For example, can we establish an equality between List[_] and some type A[_]? It turns out we can..."
Say up front what the section is about. Motivate it with an example. Then get into the details.
Hopefully this will be taken as constructive criticism.