Использование Eithers с Scala «для» синтаксиса

Насколько я понимаю, Scala синтаксис "for" чрезвычайно похож на монадический синтаксис "do" в Haskell. В Scala синтаксис "for" часто используется дляLists иOptions. Я хотел бы использовать его сEithers, но необходимые методы отсутствуют в импорте по умолчанию.

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

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

Эта функция доступна через импорт?

Есть небольшая заминка:

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

Для списка это будетList(). ДляOption, это было быNone. Стандартные библиотеки Scala предоставляют решение этой проблемы? (Или возможноscalaz?) Как? Предположим, я хотел предоставить свой собственный «экземпляр монады» для Either, как я мог это сделать?

Ответы на вопрос(3)

Ваш ответ на вопрос