Ответ 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.