title: How to give a type signature to polymorphic functions when PolyKinds is enabled?
body: <p>When enabling <code>PolyKinds</code>, previously valid type signatures can become invalid.</p>
  
  <p>The following code compiles without <code>PolyKinds</code>.</p>
  
  <pre><code>{-# LANGUAGE KindSignatures #-}
  import GHC.Generics
  
  foo :: Constructor c =&gt; t c (f :: * -&gt; *) a -&gt; [Char]
  foo = conName
  </code></pre>
  
  <p>When I enable <code>PolyKinds</code> it fails to compile.</p>
  
  <pre><code>Kind incompatibility when matching types:
    t0 :: * -&gt; (* -&gt; *) -&gt; * -&gt; *
    t :: * -&gt; (* -&gt; *) -&gt; k -&gt; *
  Expected type: t c f a -&gt; [Char]
    Actual type: t0 c f a0 -&gt; [Char]
  Relevant bindings include
    foo :: t c f a -&gt; [Char] (bound at Gen.hs:8:1)
  In the expression: conName
  In an equation for ‘foo’: foo = conName
  </code></pre>
  
  <p>Is there a way to give a type signature for <code>foo</code> when <code>PolyKinds</code> is enabled?</p>