title: Haskell weird expression
body: <p>I would like to understand why the following is a valid expression in Haskell:</p>
  
  <pre><code>Prelude&gt; let e = (+) (-)
  Prelude&gt; :type e
  e :: (Num (a -&gt; a -&gt; a), Num a) =&gt; (a -&gt; a -&gt; a) -&gt; a -&gt; a -&gt; a
  </code></pre>
  
  <p>More strange is that any expression in the form</p>
  
  <pre><code>e 1 2 3 4 ... N
  </code></pre>
  
  <p>whatever N are all valid expressions of uncomprehensible type. For example,</p>
  
  <pre><code>Prelude&gt; :t e 1 2 3 4 5
  e 1 2 3 4 5
    :: (Num ((a -&gt; a1 -&gt; t) -&gt; (a -&gt; a1 -&gt; t) -&gt; a -&gt; a1 -&gt; t),
        Num (a -&gt; a1 -&gt; t), Num a1, Num a) =&gt;
       t
  </code></pre>
  
  <p>Is this an unfortunate consequence of currying and type inference?</p>
  
  <p>Clarifications are welcome.</p>