Почему скалаз |+| оператор не работает только с картами, значение которых 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 по причинам производительности). Есть ли что-то еще, кроме написания собственного кода слияния карт?

0 ответов

Другие вопросы по тегам