0xf1f1
02/23/2024, 8:53 AMfun mkReport(res: Response): EitherNel<Error, SomeType> = either {
when (res.success) {
true -> return SomeType()
false -> {
val ee: List<String> = res.errors
return ee.map { Error(it) }
.toNonEmptyListOrNull()!!
}
}
}
The false condition fails with the following error:
Type mismatch.
Required:
EitherNel<Error, SomeType>
Found:
NonEmptyListErrorAlejandro Serrano.Mena
02/23/2024, 8:54 AMAlejandro Serrano.Mena
02/23/2024, 8:54 AMraise
0xf1f1
02/23/2024, 8:55 AMAlejandro Serrano.Mena
02/23/2024, 8:55 AMfun mkReport(res: Response): EitherNel<Error, SomeType> = either {
if (success) {
SomeType()
} else {
val errors = res.errors.map { Error(it) }.toNonEmptyListOrNull()!!
raise(errors)
}
}
Alejandro Serrano.Mena
02/23/2024, 8:56 AMeither
, you should not use return
• you use raise
to specify that you want to end in error0xf1f1
02/23/2024, 8:57 AMreturn SomeType()
too ?Alejandro Serrano.Mena
02/23/2024, 8:58 AMfun mkReport(res: Response): EitherNel<Error, SomeType> = either {
ensure(res.success) {
res.errors.map { Error(it) }.toNonEmptyListOrNull()!!
}
SomeType()
}
Alejandro Serrano.Mena
02/23/2024, 8:59 AMreturn
, this is not particular to Arrow, but the general difference between
fun f() = 3 // no return
fun f() { return 3 } // return needed
0xf1f1
02/23/2024, 8:59 AM0xf1f1
02/23/2024, 9:00 AM