Существует разница между обеими версиями относительно вывода типа. Рассмотрим
def f[A](a:A, aa:A) = null
f("x",1)
//Null = null
Здесь тип A
связан с Any
, который является супертипом String
и Int
. Но:
def g[A](a:A)(aa:A) = null
g("x")(1)
error: type mismatch;
found : Int(1)
required: java.lang.String
g("x")(1)
^
Как видите, средство проверки типов учитывает только первый список аргументов, поэтому A
связывается с String
, поэтому значение Int
для aa
во втором списке аргументов является ошибкой типа.