[Haskell] modern language design, stone age tools

Fergus Henderson fjh007 at galois.com
Wed Jun 23 14:58:22 EDT 2004

On 23-Jun-2004, Hal Daume III <hdaume at ISI.EDU> wrote:
> On Wed, 23 Jun 2004, Fergus Henderson wrote:
> > On 23-Jun-2004, MR K P SCHUPKE <k.schupke at imperial.ac.uk> wrote:
> > > This may not be the right answer to the question (which is of
> > > course lets write a debugger) - But I have never used a debugger,
> > > and find them more or less the most unfriendly and useless things
> > 
> > So how do you debug problems like "Prelude.head: empty list"
> > in large programs?
> Wasn't addressed to me, but here's what I do:
> write the following function:
>   head_ x [] = error ("head_: " ++ show x)
>   head_ _ l  = head l
> and then replace each occurance of "head" with "head_ 1" or "head_ 2" 
> etc., so I can know where it failed.

Well, there are quite a lot of such occurrences in the code that I'm working

	bash$ find . -name \*.hs -o -name \*.lhs | xargs grep -w head | wc -l

Replacing all of those occurrences by hand is going to be very very
tedious and somewhat time-consuming.  Doing it with a script would be
better, but that's not a trivial task.

Even once that is done, there's no guarantee it will actually help to
find the problem.  After all, the problem might well be arising from a
call to "head" in one of ghc's standard libraries:

	bash$ find ~/ghc6-6.2/hslibs \*.hs -o -name \*.lhs | xargs grep -w head | wc -l

So not only do I have to edit my own code, and the libraries written by
my colleagues, I also need to edit the ghc library code, and figure out
how to build and reinstall the ghc libraries.  That could take a long time.

After all that, hopefully I will finally know which function called
"head" with an empty list.  But even then there's still no guarantee
that I've actually found the source of the problem; the real problem
might be in that function's caller, or the caller's caller, etc.  So I
might have to go through the whole process again.

> (it is rather sad that this is the best approach i could come up
> with...basically tries to get around the [lack of/uselessness of/inability
> to use with ghci] stack traces)

Yes :-(

Fergus J. Henderson                 |  "I have always known that the pursuit
Galois Connections, Inc.            |  of excellence is a lethal habit"
Phone: +1 503 626 6616              |     -- the last words of T. S. Garp.

More information about the Haskell mailing list