Использование Eithers с Scala «для» синтаксиса
Насколько я понимаю, Scala синтаксис "for" чрезвычайно похож на монадический синтаксис "do" в Haskell. В Scala синтаксис "for" часто используется дляList
s иOption
s. Я хотел бы использовать его сEither
s, но необходимые методы отсутствуют в импорте по умолчанию.
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, как я мог это сделать?