Używanie Eithers ze składnią Scala „for”
Jak rozumiem, składnia Scala „for” jest bardzo podobna do składni monadycznej „do” Haskella. W Scali często używana jest składnia „for”List
s iOption
s. Chciałbym go używaćEither
s, ale niezbędne metody nie są obecne w domyślnych importach.
for {
foo <- Right(1)
bar <- Left("nope")
} yield (foo + bar)
// expected result: Left("nope")
// instead I get "error: value flatMap is not a member..."
Czy ta funkcja jest dostępna za pośrednictwem importu?
Jest lekki problem:
for {
foo <- Right(1)
if foo > 3
} yield foo
// expected result: Left(???)
Dla listy byłobyList()
. DlaOption
, to byłbyNone
. Czy standardowe biblioteki Scala stanowią rozwiązanie tego problemu? (A możescalaz
?) W jaki sposób? Przypuśćmy, że chciałbym przedstawić moją własną „instancję monad” dla każdej z nich. Jak mogłem to zrobić?