There is currently a discussion open about throws, but it seems that the idea 
would be to add optionals to throws. In my opinion it would be much better to 
just get rid of all the throw error system.

I think an *Result<ErrorT, T>* type would provide much better error handling 
than the current solution:

- It would work just like Optional. We could use ?, ??, map, all those concepts 
that are already in use. A Result would basically be like a missing value with 
an error attached. *mapError* could also be added to transform error types to 
the appropriate value. 

- We would have a specific error type. Right now throws just returns an 
*Error*, which is basically a glorified *Any*. Anything can go in there, and 
it's really hard (or impossible) to know if we are dealing with all the 
possible options. a Result type would enforce a specific error, so we would 
gain type safety and we could be sure we are dealing with all the cases.

- It would simplify everything. We could get rid of *try*, *try?*, *throws*, 
*rethrows*, *do … catch*.

- It could be used asynchronously by just passing the *Result* value. Right now 
there is a different mechanism for handling async and sync calls. The sync 
calls have all the *throws*, *rethrows*, must be taken care with *try* and *do 
… catch*, while in a callback you just send the error.

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to