Как я понимаю, синтаксис Scala "для" очень похож на синтаксис синтаксиса Haskell monadic. В Scala синтаксис для синтаксиса часто используется для List и 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?) Как? Предположим, я хотел предоставить свой собственный "экземпляр монады" для Либо, как я мог это сделать?