Scalaz Map[String, Int] «суммирование» и сгибЛевый не работает
Вопрос
У меня есть следующая функция, используя Scalaz |+| оператор:
def sumGames(games: List[Map[String, Int]]) =
games.foldLeft(_ |+| _)
Добавление двух карт вручную работает безупречно (а:Карта [String, int) |+| B:Map[String, Int]), но объявление указанной выше функции приводит к 3 ошибкам:
<console>:20: error: missing parameter type for expanded function ((x$1, x$2) =>
x$1.$bar$plus$bar(x$2))
games.foldLeft(_ |+| _)
^
<console>:20: error: missing parameter type for expanded function ((x$1: <error>
, x$2) => x$1.$bar$plus$bar(x$2))
games.foldLeft(_ |+| _)
^
<console>:20: error: missing arguments for method foldLeft in trait LinearSeqOpt
imized;
follow this method with `_' if you want to treat it as a partially applied funct
ion
games.foldLeft(_ |+| _)
Почему это не работает и как это исправить?
Решение
Взгляните на foldLeft
API, он принимает два списка аргументов.Первое — это начальное значение кратности, второе — уменьшающая функция.
Я думаю, ты, наверное, хочешь
import scalaz._
import Scalaz._
def sumGames(games: List[Map[String, Int]]) =
games.foldLeft(Map.empty[String, Int])(_ |+| _)
Если вы знаете, что ваш список не пуст, вы также можете использовать games.reduce(_ |+| _)
.
Не связан с StackOverflow