Usando o Eithers com a sintaxe “for” do Scala

Pelo que entendi, a sintaxe Scala "for" é extremamente semelhante à sintaxe monádica "do" de Haskell. Em Scala, a sintaxe "for" é geralmente usada paraListareiaOptions. Eu gostaria de usá-lo comEithers, mas os métodos necessários não estão presentes nas importações padrão.

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

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

Esta funcionalidade está disponível através de alguma importação?

Há um ligeiro engate:

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

Para uma lista, seriaList(). ParaOption, seriaNone. As bibliotecas padrão do Scala fornecem uma solução para isso? (Ou talvezscalaz?) Como? Suponha que eu quisesse fornecer minha própria "monad instance" para qualquer um deles, como eu poderia fazer isso?

questionAnswers(3)

yourAnswerToTheQuestion