У меня есть две карты следующим образом.
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
по соображениям производительности). Есть ли какой-нибудь обходной путь, кроме написания моего собственного кода слияния карт?
Seq
не имеет экземпляра моноида. Моноид для карты нужен моноид для типа значений (или полугруппа, не знаю, как именно это делается в scalaz). - person Łukasz   schedule 09.01.2017IndexedSeq
есть экземпляр моноида. Так что, не могли бы вы вместо этогоtoIndexedSeq
значения (что, надеюсь, должно быть бездействующим, еслиSeq
уже являетсяIndexedSeq
)? - person Tim Destan   schedule 10.01.2017IndexedSeq
не работает. Та же ошибка. - person user1819676   schedule 11.01.2017