Ну, это:
addUhum _
это расширение eta. Преобразует методы в функции. С другой стороны, это:
addUhum(_)
- анонимная функция. Фактически, это частичное применение функции, в котором этот параметр не применяется, и все это преобразуется в функцию. Расширяется до:
x => addUhum(x)
Точные правила расширения немного сложно объяснить, но, в принципе, функция «запустится» в самом внутреннем разделителе выражения. Исключение составляют приложения с частичной функцией, где «x» перемещается за пределы функции - если вместо параметра используется _
.
Во всяком случае, вот как это расширяется:
val ummThenAhem = x => addAhem(x).compose(y => addUmm(y))
Увы, механизм вывода типов не знает тип x или y. Если хотите, вы можете увидеть, что именно он пытался, используя параметр -Ytyper-debug
.