haskell,polymorphism,higher-rank-types,polykinds

f2 requires its argument to be polymorphic in the kind k, while f1 is just polymorphic in the kind itself. So if you define {-# LANGUAGE RankNTypes, PolyKinds #-} f1 = undefined :: (forall a m. m a -> Int) -> Int f2 = undefined :: (forall (a :: k)...

haskell,higher-kinded-types,type-kinds,polykinds

Polykinded type application is injective from the outside, but certainly not injective from inside Haskell. By "injective from the outside" I mean that whenever there is a Refl with type f a :~: g b, then it must be the case that f is equal to g and a is...