¿Cuál es la diferencia entre los tipos de las dos funciones siguientes?Diferencia entre tipos curry similares en Scala
def add1: Int => Int => Int = a => b => a + b
def add2(a: Int)(b: Int) = a + b
Según sus declaraciones, parecen tener el mismo tipo. Ambos son llamados de la misma manera:
scala> add1(1)(2)
res2: Int = 3
scala> add2(1)(2)
res3: Int = 3
Sin embargo, hay una aparente diferencia en sus tipos:
scala> :t add1
Int => Int => Int
scala> :t add2
(a: Int)(b: Int)Int
Además, la aplicación parcial de add1
es un poco más limpio que el de add2
.
scala> add1(1)
res4: Int => Int = <function1>
scala> add2(1)(_)
res5: Int => Int = <function1>