• Edward Z. Yang's avatar
    Provide useful call-stacks over all IO code. · 48a0d6ce
    Edward Z. Yang authored
    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: default avatarEdward Z. Yang <ezyang@cs.stanford.edu>