如何使用 scalaz.MonadPlus.separate 将 Eithers 列表转换为 Either of Lists

How to turn a List of Eithers to a Either of Lists using scalaz.MonadPlus.separate

如何使用 MonadPlus.separateEithersList 转换为 ListsEither

作者在 this answer 中声明了此解决方案,但未能提供导入或完整示例:

If scalaz is one of your dependencies I would simply use separate:

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 })

该解决方案是正确的,您只是在这里缺少 import scalaz.Scalaz._