["Request"] Annotate Raise interface with @RaiseDSL
What version are you currently using? 1.2.4
What would you like to see?
According to DslMarker documentation, DSL marker is used to annotate interfaces/classes to limit visibility of their members in cases when there are multiple annotated receivers in scope.
But currently in Arrow @RaiseDSL annotation is not present on the Raise interface, only on its methods and extensions. Consequently, this code compiles and runs:
import arrow.core.raise.*
fun main() {
either<Int, Int> {
withError<Int, String, _>(String::length) {
raise("23423") // correctly resolves to [email protected]
raise(42) // error type does not match inner Raise, but the call still resolves to [email protected]
}
}.also(::println)
// prints Either.Left(5)
}
This is intentional behaviour. We want you to be able to set up multiple Raise instances, and be able to raise to any of them easily. This allows for easy error handling for multiple types
As mentioned by @kyay10, this is by design. Especially in accumulate environments, we want to still give the option to call the outer raise, to signal that accumulation has to stop.