CallStack naming

Joachim Breitner mail at
Thu Jan 21 09:19:11 UTC 2016


Am Mittwoch, den 20.01.2016, 09:24 -0800 schrieb Eric Seidel:
> The problem is that I don't know how to implement
> `withFrozenCallStack`
> (included in the wiki) as a Haskell function if CallStacks aren't
> implicit parameters under-the-hood.

breaking it further down, the problem is not with `withFrozenCallStack`
per se, but rather with any code that wants to set the current
callstack, e.g. anything of the current form

  let ?callStack = ...
  in ..

How would that look with a magic nullary constraint "AppendsCallStack"?
It’d probably need a built-in function

setCallStack :: CallStack -> (AppendsCallStack => a) -> a

with which we can likely implement `withFrozenCallStack` again:

withFrozenCallStack :: AppendsCallStack => (AppendsCallStack => a) -> a
withFrozenCallStack do_this =
  -- we pop the stack before freezing it to remove
  -- withFrozenCallStack's call-site
  let callStack = freezeCallStack (popCallStack callStack)
  in setCallStack callStack do_this

It might need a second call to popCallStack depending on the precise
semantics of `callStack :: AppendsCallStack => CallStack` (i.e. whether
that does pop one entry off itself).


Joachim “nomeata” Breitner
  mail at joachim-breitner.de
  Jabber: nomeata at  • GPG-Key: 0xF0FBF51F
  Debian Developer: nomeata at

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <>

More information about the ghc-devs mailing list