У меня есть подпись этого метода:
def fold[B](startValue: A): ((A, A) => B) => B
IntelliJ говорит мне, что скобки в выражении lamba не нужны и что подпись может быть записана как:
def fold[B](startValue: A): (A, A) => B => B
Этоправда?Я узнал, что у нас есть ассоциативность правой руки, что означает, что
def fold[B](startValue: A): (A, A) => B => B
- это то же самое, что и
def fold[B](startValue: A): (A, A) => (B => B)
Но это не похоже на то, что явыражено в первой подписи.Я хочу, чтобы fold
:
вернул функцию x, которая принимает функцию y с двумя параметрами типа A и возвращает значение типа B. Я также хочу, чтобы функция x возвращала значение типа B.
Но последняя сигнатура, кажется, говорит, что fold:
возвращает функцию x, которая принимает два параметра типа A и возвращает другую функцию y, которая принимает параметр типа B и возвращает значениетипа B.
Это явно не то, что я хочу!В первом случае функция x возвращает значение.Во втором он возвращает функцию.
Действительно ли IntelliJ здесь не прав?
КОНТЕКСТ:
abstract class MyList[+A] {
def fold[B](startValue: B): ((A, A) => B) => B
}