Почему передача Nil на foldLeft не работает?

Когда я строю список, используяfoldLeft Меня часто раздражает необходимость явного ввода введенного параметра, и я хочу просто использовать вместо него `Nil '- вот надуманный пример:

scala> List(1,2,3).foldLeft(List[Int]())((x,y) =>  y :: x)
res17: List[Int] = List(3, 2, 1)

scala> List(1,2,3).foldLeft(Nil)((x, y) => y :: x)
<console>:10: error: type mismatch;
 found   : List[Int]
 required: scala.collection.immutable.Nil.type
              List(1,2,3).foldLeft(Nil)((x,y) =>  y :: x)

Это не так уж плохо сList[Int] но как только вы начнете использовать списки ваших собственных классов, которые почти наверняка будут иметь более длинные имена, или даже списки кортежей или других контейнеров, так что вам нужно будет указать несколько имен классов, это станет ужасно:

list.foldLeft(List.empty[(SomethingClass, SomethingElseClass)]) { (x,y) => y :: x }

Я предполагаю, что причина этого не в том, что с чем-то вроде5 :: Nil компилятор может определить тип пустого спискаList[Int], но когдаNil передается в качестве параметраfoldLeft у него недостаточно информации для этого, и к тому времени, когда он начинает использовать его тип уже установлен. Но правда ли, что не смог? Может ли он не выводить тип из возвращаемого типа функции, передаваемой в качестве второго аргумента?

А если нет, есть ли какая-то более аккуратная идиома, о которой я просто не знаю?

Ответы на вопрос(2)

Ваш ответ на вопрос