Verwenden von Eithers mit der Scala-For-Syntax

Wie ich es verstehe, ist die Scala "for" -Syntax der monadischen "do" -Syntax von Haskell sehr ähnlich. In Scala wird häufig die Syntax "für" verwendetLists undOptions. Ich würde es gerne mit verwendenEithers, aber die erforderlichen Methoden sind in den Standardimporten nicht vorhanden.

for {
  foo <- Right(1)
  bar <- Left("nope")
} yield (foo + bar)

// expected result: Left("nope")
// instead I get "error: value flatMap is not a member..."

Ist diese Funktionalität über einen Import verfügbar?

Es gibt ein kleines Problem:

for {
  foo <- Right(1)
  if foo > 3
} yield foo
// expected result: Left(???)

Für eine Liste wäre esList(). ZumOption, es wäreNone. Bieten die Scala-Standardbibliotheken eine Lösung dafür? (Oder vielleichtscalaz?) Wie? Angenommen, ich wollte entweder meine eigene "Monadeninstanz" bereitstellen, wie könnte ich das tun?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage