title: Why automatic currying in ML family languages
body: <p>ML family languages have automatic currying - where a function call with two arguments is considered to apply them one at a time, <code>f x y</code> = <code>(f x) y</code> - whereas other language families don't.</p>
  
  <p>Is this just a historical accident, or is there a technical reason for this?</p>
  
  <p>Note that I am <em>not</em> asking whether automatic currying is net good or bad (that's a subjective judgment). I'm asking whether it synergizes with other features of ML family languages so as to make it more natural to include in those languages, and if so, what are those features and what is the nature of the synergy? Or conversely, are there features of other language families that would clash with any attempt to provide automatic currying?</p>
  
  <p>Edit: in addition to the given answers, it occurs to me that there is probably another factor: if you are writing the compiler <em>in</em> a language with pattern matching, it's okay for the AST to be more complex, which means it's okay for the conventional 'call with a tuple' construct to be a compound term. So given that the compiler is often written in its own language, automatic currying and pattern matching go well together.</p>