ghc-call-stack-extras- Extra utilities for HasCallStack

Copyright(c) 2018 David Feuer
LicenseBSD-style (see the file LICENSE)
Safe HaskellNone



Currently this module only supports adding notes to call stacks, but it may offer more features later.



callStackNote :: HasCallStack => String -> (HasCallStack => a) -> a Source #

Add a note to the current call stack. This note will be included in the stack trace in case of an error. Be sure not to insert notes that throw errors, or stack traces will get confusing.


Suppose we've written

f :: HasCallStack => (HasCallStack => Int -> Int -> Int) -> Int -> Int
f g x = callStackNote ("x = " ++ show x) $ g 5 x

quotTrace :: HasCallStack => Int -> Int -> Int
quotTrace _ 0 = error "divide by zero"
quotTrace x y = x quot y

calling print $ f quotTrace 0 will print something like

Test: divide by zero
CallStack (from HasCallStack):
  error, called at Test.hs:11:17 in main:Main
  quotTrace, called at Test.hs:14:18 in main:Main
  g, called at Test.hs:8:44 in main:Main
  callStackNote (x = 0)
    , called at Test.hs:8:9 in main:Main
  f, called at Test.hs:14:16 in main:Main