Функция currying из существующего ответа недействительна.

Я попробовал выполнить приведенный ниже код:

val f: (a: Int) => (b: Int) => (c: Int) = a + b + c

найден в этом потоке в REPL и IntellijIDEA, но он явно недействителен.

В REPL:

scala> val f: (a: Int) => (b: Int) => (c: Int) = a + b + c
<console>:1: error: ')' expected but ':' found.
       val f: (a: Int) => (b: Int) => (c: Int) = a + b + c
                ^

Кто-нибудь знает, почему? Моя версия scala - 2.10.1

Спасибо

Ответы

Ответ 1

Вы пишете тип, как будто вы пишете:

val a: 5 = 5

То, что вы хотите, больше похоже на

val f  = (a: Int) => (b: Int) => (c: Int) => a+b+c

Для дальнейшего развития REPL напишет

f: Int => (Int => (Int => Int)) = <function1>

Поскольку определение функции является правильным ассоциативным, вы можете явно указать тип f

f: Int => Int => Int => Int = (a: Int) => (b: Int) => (c: Int) => a+b+c

Если вы явно предоставляете такой тип функции, компилятор не нуждается в информации о том, что такое a, b и c, и вы могли бы просто написать a = > b = > c = > a + b + c.