Почему скалаз |+| оператор не работает только с картами, значение которых Seq?
У меня есть две карты следующим образом.
import scalaz._, Scalaz._
val map1: Map[String, Seq[String]] = Some value
val map2: Map[String, Seq[String]] = Somve Value
Это прекрасно компилируется и все работает как положено.
// Compiles
map1.mapValues{_.toList} |+| map2.mapValues{_.toList}
Но этот не компилируется (не может разрешить символ |+|
) Мне интересно почему?
// Doesn't compile
map1 |+| map2
Обновление: я нашел эту замечательную статью, которая отвечает, почему происходит ошибка компиляции, и это в основном, как люди упоминали в разделе комментариев, Seq
не является моноидом: почему List является полугруппой, а Seq нет?
Теперь мой вопрос: означает ли это, что я должен преобразовать свой Seq
(IndexedSeq
есть такая же проблема) List
и обратно к Seq
снова (Seq
с на самом деле IndexedSeq
и я должен держать их как IndexedSeq
по причинам производительности). Есть ли что-то еще, кроме написания собственного кода слияния карт?