title: Why F# currying "flattens" function type?
body: <p>The following function:</p>
  
  <pre><code>let twoInputs x y =
      let sum = x + y
      let product a = sum * a
      product
  </code></pre>
  
  <p>Has the type:</p>
  
  <pre><code>val twoInputs : x:int -&gt; y:int -&gt; (int -&gt; int)
  </code></pre>
  
  <p>That's perfectly reasonable, I see why it's coming. But why this function:</p>
  
  <pre><code>let oneInput = twoInputs 1
  </code></pre>
  
  <p>is of type <code>val oneInput : (int -&gt; int -&gt; int)</code> ?</p>
  
  <p>Shouldn't it be <code>int -&gt; (int -&gt; int)</code> ?</p>
  
  <p>Also, I think the functions above should comply with <a href="https://en.wikipedia.org/wiki/Associative_property" rel="nofollow">Associative property</a>, so there should be no differences between <code>int -&gt; int -&gt; (int -&gt; int)</code> and <code>int -&gt; int -&gt; int -&gt; int</code>. If so, why not just specify the latter as the function type for <code>twoInputs</code>?</p>