The problem is that a GHC type system will never instantiate a type variable for a polymorphic type. This will require consistency in the type system.
In your specific example, we have
(.) :: (b->c) -> (a->b) -> (a->c)
and to check the type k2 . k1, we need to create an instance b ~ End K'that is a polymorphic type.
End K' , . .
newtype End g = End { unEnd :: forall a. g a a }
/ End g . , " " GHC.
, (, Agda, Coq, Idris) ( ), . , Haskell - . , , , .