I have some code that looks like this:
data class MyStrings(val a: String, val b: String)
sealed class Error {
object SpecificError0 : Error()
object SpecificError1 : Error()
object SpecificError2 : Error()
}
fun either2(): Either<Error, String> =
Either.catch { throw RuntimeException("Either 2") }.mapLeft { Error.SpecificError2 }
fun either4(): Either<Error, MyStrings> =
Either.catch {
MyStrings(
a = "Hello",
b = either2().getOrElse { "" }
)
}.mapLeft { Error.SpecificError2 }
This will swallow the error from either2().
I'm trying to find a way to throw this error from either2 back if possible.
I know I can do something like this:
fun either5(): Either<Error, MyStrings> =
either2()
.flatMap {
Either.Right(
MyStrings(
a = "Hello",
b = it
)
)
}
but it seems strange to call something before I need it!
Any thoughts on how I can change either4()? Sorry if this is a n00b question, but I'm still trying to wrap my head around functional programming and Arrow.
Thank you.