title: Are Rank2Types/RankNTypes practical without polytype variables?
body: <p>Since type variables cannot hold poly-types, it seems that with Rank*Types we cannot re-use existing functions because of their monotype restriction.</p>
  
  <p>For example, we cannot use the function (.) when the intermediate type is a polytype. We are forced to re-implement (.) at the spot. This is of course trivial for (.) but a problem for more substantial bodies of code.</p>
  
  <p>I also think making ((f . g) x) not equivalent to (f (g x)) a severe blow to referential transparency and its benefits.</p>
  
  <p>It seems to me to be a show-stopper issue, and seems to make the Rank*Types extensions almost impractical for wide-spread use.</p>
  
  <p>Am I missing something? Is there a plan to make Rank*Types interact better with the rest of the type-system?</p>
  
  <p>EDIT: How can you make the types of (runST . forever) work out?</p>