title: Expressing infinite kinds
body: <p>When expressing infinite types in Haskell:</p>
  
  <pre><code>f x = x x -- This doesn't type check
  </code></pre>
  
  <p>One can use a <code>newtype</code> to do it:</p>
  
  <pre><code>newtype Inf = Inf { runInf :: Inf -&gt; * }
  
  f x = x (Inf x)
  </code></pre>
  
  <p>Is there a <code>newtype</code> equivalent for kinds that allows one to express infinite kinds?</p>
  
  <p>I already found that I can use type families to get something similar:</p>
  
  <pre><code>{-# LANGUAGE TypeFamilies #-}
  data Inf (x :: * -&gt; *) = Inf
  type family RunInf x :: * -&gt; *
  type instance RunInf (Inf x) = x
  </code></pre>
  
  <p>But I'm not satisfied with this solution - unlike the types equivalent, <code>Inf</code> doesn't create a new kind (<code>Inf x</code> has the kind <code>*</code>), so there's less kind safety.</p>
  
  <p>Is there a more elegant solution to this problem?</p>