mapException type under extensible exceptions
The old type is mapException :: (Exception -> Exception) -> a -> a
e.g. you might map have mapped a !DivZeroError to a dynamic exception of some sort (gee, I don't know). Of course the "dynamic exception" will be less of a hack when the code is converted to extensible exceptions.
In any case that doesn't work with the 6.9-current signature mapException :: (Exception e) => (e -> e) -> a -> a
because !DivZeroErrors are not necessarily the same type as the exceptions you're throwing, obviously!
The old signature is closer in meaning to mapException :: (SomeException -> SomeException) -> a -> a
which is isomorphic to mapException :: (Exception e1, Exception e2) => (e1 -> e2) -> a -> a
which I think is the inferred type, and ought to be the explicit type too.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 6.9 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | libraries/base |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | Unknown |
| Architecture | Unknown |