[Haskell-cafe] implicit call stacks and calling function

Evan Laforge qdunkan at gmail.com
Mon Mar 7 23:36:03 UTC 2016

On Mon, Mar 7, 2016 at 11:46 AM, Eric Seidel <eric at seidel.io> wrote:
> The reason we provide the name of the callee is that the standard format
> for a stack trace is callee+pos :)

I guess it depends how you look at it.  I'm used to caller + pos, e.g. in Java:

java.lang.RuntimeException: blah blah
at com...Caller.caller(Caller.java:494)
at ...

Or python:

Traceback (most recent call last):
  File "t.py", line 2, in caller
    def caller(): callee()
  File "t.py", line 1, in callee
    def callee(): 1/0
ZeroDivisionError: integer division or modulo by zero

The haskell version (reversed to match python) would be like:

File "Caller.hs", line 6, in callee
    caller = callee 10
File "Caller.hs", line 9, in ?stack
    callee _n = mapM_ print (Stack.getCallStack ?stack)

To me this seems off by one, line 6 is in 'caller', not 'callee'.

> You point about wanting the caller's name too is well-taken though. In
> most languages you can just look at the next item in the stack to grab
> the caller, but with HasCallStack there may be no next item... I doubt
> it would be hard to add the caller's name too, I'd be happy to look into
> it post-ICFP. Would you mind filing a ticket?

Done: https://ghc.haskell.org/trac/ghc/ticket/11686

In it I suggested adding a Stack.getFrames :: [Stack.Frame], Frame
could then have callee and srcloc fields as per getCallStack's pairs,
and add a caller field.  Just a suggestion.

Thanks so much!

More information about the Haskell-Cafe mailing list