ellie20
(ellie20)
December 1, 2023, 1:22am
95
I'll repeat here a comment I made somewhere else :
A concern I have is that the thrown type of the function is required to conform to Error. I think there are two potential problems with that.
First, doing so unnecessarily requires any thrown type to conform to Sendable. This makes sense with Error because any Error is a "currency type", and conforming it to Sendable aids interoperability with concurrency. But with typed throws, this becomes unnecessary, since the compiler can always statically determine if a given error type is Sendable or not.
Second, we can expect some users to make "helper enums" with something like this:
enum MyError {
case someSpecializedError
case decoding(DecodingError)
}
In cases like these, it's almost always wrong to promote MyError to any Error, because code that would normally handle a DecodingError would fail to do so. Additionally, we might not want users to throw the .someSpecializedError case outside of some specific domain. Making MyError not conform to Error would prevent that.
With the addition that the problem with required Sendable conformance will also apply to ~Copyable, and future hypothetical opt-out protocols like ~Escapable.
2 Likes