[Haskell-cafe] Closure trace?
Michael Marte
marte at pms.informatik.uni-muenchen.de
Wed Jun 14 05:19:03 EDT 2006
Hello *,
frequently we are seeing messages like "List.head: empty list" or
"Maybe.fromJust: Nothing". It is clear what happened and where the
messages were triggered yet the real cause is usually VERY hard to find
unless the program is small and simple. I came to the conclusion that
functions like head and fromJust are best to be avoided because their
use may render large programs unmaintainable. Instead I use irrefutable
pattern matching like (x : _) = l and Just bla = maybeBla whenever
possible because when a pattern match fails the ghc runtime system gives
me a nice error message naming the module, line and column. However,
this procedure may become tedious when the error occurs in a call to a
third-party library function.
I wonder whether it is possible to print a "closure trace" similar to a
stack trace in procedural programming. Say we have two modules A and B:
module A where
import B
a = b
module B
b = c where c = error "go to hell"
I would like to see something like this:
sh$ ghci A
<ghci startup messages>
> a
Runtime error "go to hell" in module B at line 2
Trace:
B.b.c
B.b
A.a
This way it would be easy to find the reason that actually caused, say,
head to fail.
I guess it would be sufficient to complement closures with information
on the precise place of their definition.
Michael
More information about the Haskell-Cafe
mailing list