Proposal for throwLeft and throwLeftIO in Control.Exception
There already exist some functions to translate between Maybe and Exception, and between Either and Exception in the module Control.Exception.
Given an API like:
data MyException --...
instance Exception MyException --...
myUsefulFunction :: a -> b -> c -> Either MyException d
myUsefulAction :: a -> b -> c -> IO (Either MyException d)
It sometimes the case that calling code that cannot sensibly handle Left results directly.
This proposal is to add standard library functions that let calling code easily to turn Left results into thrown runtime exceptions, which might be caught and handled further up the call stack.
throwLeft :: Exception e => Either e a -> a
throwLeftIO :: Exception e => Either e a -> IO a
Note that examples of functions named throwLeft may be found in the wild:
https://www.stackage.org/lts-7.10/hoogle?q=throwLeft.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.1 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | libraries/base |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | simonmar |
| Operating system | |
| Architecture |