title: OCaml labelled arguments order with higher-order functions
body: <p>In <a href="https://realworldocaml.org/v1/en/html/variables-and-functions.html#higher-order-functions-and-labels" rel="nofollow">this section</a> of Real World OCaml, it basically says:</p>
  
  <pre><code>let apply_to_tuple f (first, second) = f ~first ~second
  let apply_to_tuple_2 f (first, second) = f ~second ~first
  let divide ~first ~second = first / second
  </code></pre>
  
  <p>This allows <code>apply_to_tuple divide (3, 4)</code> to work, but not <code>apply_to_tuple_2 divide (3, 4)</code>. The latter throws:</p>
  
  <pre><code>Error: This expression has type first:int -&gt; second:int -&gt; int
     but an expression was expected of type second:'a -&gt; first:'b -&gt; 'c
  </code></pre>
  
  <p>I was wondering why this was the case. It seems that there isn't any ambiguity here and the compiler could have inferred everything correctly?</p>