title: Why does Scala provide both multiple parameters lists and multiple parameters per list?
body: <p>Multiple parameters lists, e.g. <code>def foo(a:Int)(b:Int) = {}</code> and multiple parameters per list, e.g. <code>def foo(a:Int, b:Int) = {}</code> are semantically equivalent so far as I can tell, and most functional languages have only one way of declaring multiple parameters, e.g. F#.</p>
  
  <p>The only reason I can figure out for supporting both these styles of function definitions is to allow syntax-like language extensions using a parameter list that has only one parameter in it.</p>
  
  <pre><code>def withBufferedWriter(file: File)(block: BufferedWriter =&gt; Unit)
  </code></pre>
  
  <p>can now be called with the syntax-looking</p>
  
  <pre><code>withBufferedWriter(new File("myfile.txt")) { out =&gt;
    out write "whatever"
    ...
  }
  </code></pre>
  
  <p>However, there could be other ways of supporting the use of curly braces without having multiple parameter lists.</p>
  
  <p>A related question: why is the use of multiple parameter lists in Scala called "currying"? Currying is usually defined as a technique for making an n-ary function unary for the sake of supporting partial application. However, in Scala one can partially apply a function without making a "curried" (multiple parameter lists with one param each) version of the function.</p>