Provide useful call-stacks over all IO code.
The key idea is that we define: type IO a = HasCallStack => Prelude.IO a and voila, call stacks are maintained across all IO! You can look at the stacks using -v"debug +callstack". There are a number of IO functions for which the call stack is never used. They are explicitly annotated using NoCallStackIO. Maybe some day they will use call stacks and we can change their types. Similarly, there are a number of functions which do have type IO, but then suppress the redundant constraint error using "_ = callStack". Maybe some day we will attach call stacks to the exceptions we throw. Signed-off-by: Edward Z. Yang <firstname.lastname@example.org>
Showing with 98 additions and 55 deletions