Как превратить список либо в любой из списков, используя scalaz.MonadPlus.separate

Как превратить List из Eithers в Either из Lists, используя MonadPlus.separate?

В этом ответе автор утверждает это решение, но не может предоставить импорт или полный пример:

Если scalaz является одной из ваших зависимостей, я бы просто использовал отдельный:

val el : List[Either[Int, String]] = List(Left(1), Right("Success"), Left(42))

scala> val (lefts, rights) = el.separate
lefts: List[Int] = List(1, 42)
rights: List[String] = List(Success)

Это реально работающее решение? Я вижу, что MonadPlus имеет функцию separate, но мне так и не удалось заставить ее работать.

ps: я знаю, что могу добиться этого без scalaz, например, в примере ниже. Однако в этом вопросе я спрашиваю, как использовать scalaz.MonadPlus.separate для достижения этой цели.

(lefts, rights) = (el.collect { case Left(left) => left }, el.collect { case Right(right) => right })

person David Portabella    schedule 27.04.2016    source источник
comment
Если сомневаетесь, импортируйте все это.. import scalaz._, Scalaz._   -  person Michael Zajac    schedule 27.04.2016
comment
Если вам нужен конкретный импорт, вы можете посмотреть мой аналогичный ответ на то, что кажется дубликатом связанного вопроса.   -  person Peter Neyens    schedule 27.04.2016
comment
кто-нибудь знает, как это сделать у кошек?   -  person ticofab    schedule 24.06.2018


Ответы (1)


Это решение правильное, здесь просто не хватает import scalaz.Scalaz._.

person Paweł Jurczenko    schedule 27.04.2016