Offer a way to augment call stacks
Sometimes, I may want to capture some information that can be reported when an error occurs. Suppose I have
f x y = g x (h y)
g :: HasCallStack => ...
g x y = ..... (error "whoopsy") ....
I may want f to record information about y that will be reported if g throws an exception. As far as I can tell, the only currently supported way to do this is horrible and limited:
f x y = unsafeDupablePerformIO $
catch (evaluate (g x (h y))) $ \e -> ....
I'd much rather have a function like
addMessage :: HasCallStack
=> String
-> (HasCallStack => a)
-> a
This would stick a string into the current call stack "frame" and call the argument. I imagine this can be implemented directly with the underlying implicit parameter, likely with a slight change to the CallStack representation.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.4.1 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Core Libraries |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |