title: What is the rule of the order of multiple type variables in haskell?
body: <p>For example, ParsecT has multiple type variables in its definition.</p>
  
  <pre><code>newtype ParsecT s u m a
      = ParsecT {unParser :: forall b .
                   State s u
                -&gt; (a -&gt; State s u -&gt; ParseError -&gt; m b) 
                -&gt; (ParseError -&gt; m b)                   
                -&gt; (a -&gt; State s u -&gt; ParseError -&gt; m b) 
                -&gt; (ParseError -&gt; m b)                   
                -&gt; m b
               } 
  </code></pre>
  
  <p>Can we do it like this ?</p>
  
  <pre><code>newtype ParsecT m a s u     -- Only the order of s u m a is changed to m a s u.
      = ParsecT {unParser :: forall b .
                   State s u
                -&gt; (a -&gt; State s u -&gt; ParseError -&gt; m b) 
                -&gt; (ParseError -&gt; m b)                   
                -&gt; (a -&gt; State s u -&gt; ParseError -&gt; m b) 
                -&gt; (ParseError -&gt; m b)                   
                -&gt; m b
               }
  </code></pre>
  
  <p>I am wondering whether there is a rule or principle about the order of type variables when we define a newtype.</p>