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

Copyright(c) 2018 David Feuer
LicenseBSD-style (see the file LICENSE)
MaintainerDavid.Feuer@gmail.com
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Control.CallStack.Extras

Description

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

Synopsis

Documentation

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.

Example

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