2016-04-27 2 views
0

Wie ein List von Eithers zu einem Either von Lists drehen, MonadPlus.separate mit?Wie man eine Liste der Eithers auf ein Entweder-Listen drehen scalaz.MonadPlus.separate mit

In this answer der Autor dieser Lösung behauptet, aber nicht die Ein- oder vollständiges Beispiel zur Verfügung zu stellen:

Wenn scalaz eine Ihrer Abhängigkeiten ist, würde ich einfach getrennt verwenden:

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) 

Ist das eine echte Arbeitslösung? Ich sehe, dass MonadPlus eine separate Funktion hat, aber ich schaffte es immer noch nicht, es zum Funktionieren zu bringen.

ps: Ich bin mir bewusst, dass ich dies ohne Scalaz erreichen kann, wie das Beispiel unten. In dieser Frage frage ich jedoch, wie man scalaz.MonadPlus.separate verwendet, um dies zu erreichen.

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

Im Zweifelsfall alles importieren .. 'import scalaz._, Scalaz._' –

+1

Wenn Sie die spezifischen Importe möchten, können Sie [meine ähnliche Antwort] (http://stackoverflow.com/a/36556060/5020846) zu einem Duplikat der verknüpften Frage. –

Antwort

1

Diese Lösung ist korrekt, Sie fehlen nur import scalaz.Scalaz._ hier.

Verwandte Themen