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

Теперь мой вопрос: означает ли это, что мне нужно преобразовать мой SeqIndexedSeq такая же проблема) в List и снова обратно в Seq (на самом деле Seq это IndexedSeq, и я должен оставить их как IndexedSeq по соображениям производительности). Есть ли какой-нибудь обходной путь, кроме написания моего собственного кода слияния карт?


person user1819676    schedule 09.01.2017    source источник
comment
Угадай: Seq не является моноидом.   -  person pedrofurla    schedule 09.01.2017
comment
Seq не имеет экземпляра моноида. Моноид для карты нужен моноид для типа значений (или полугруппа, не знаю, как именно это делается в scalaz).   -  person Łukasz    schedule 09.01.2017
comment
Означает ли это, что мне нужно преобразовать свою последовательность в список и снова вернуться к IndexSeq (на самом деле последовательности являются indexSeq, и я должен сохранить их как IndexSeq по соображениям производительности). Есть ли какой-нибудь обходной путь, кроме написания моего собственного кода слияния карт?   -  person user1819676    schedule 10.01.2017
comment
Судя по ответу, на который вы ссылаетесь в своем обновлении, похоже, что для IndexedSeq есть экземпляр моноида. Так что, не могли бы вы вместо этого toIndexedSeq значения (что, надеюсь, должно быть бездействующим, если Seq уже является IndexedSeq)?   -  person Tim Destan    schedule 10.01.2017
comment
Даже использование IndexedSeq не работает. Та же ошибка.   -  person user1819676    schedule 11.01.2017