[Hat] Hat bug report: hat-stack fails on simple example

Malcolm Wallace Malcolm.Wallace at cs.york.ac.uk
Wed Jun 30 15:46:42 EDT 2004


Fergus Henderson <fjh007 at galois.com> writes:

> I tried building this with hat ("hmake -hat Foo"), running it ("./Foo")
> and then using hat-stack ("hat-stack Foo").  But hat-stack reported no
> useful information.

hat-stack is kind of obsolete.  At least, it has had no maintenance in
a long time, partly because it is written in C rather than Haskell, but
mainly because hat-trail can do everything hat-stack can, but better.
Perhaps one day we will rewrite hat-stack in Haskell as a cut-down
version of hat-trail.

However, in this instance, I suspect you got no useful information from
hat-stack for exactly the same reason you had trouble with hat-trail
(see below).

> I also tried using hat-trail, but I couldn't get any useful information
> out of that either.

The reason for this is that your program exclusively uses CAFs
(constants).  A CAF does not have a parent recorded in the trace,
essentially because the CAF could be called many times, and we have
no mechanism for recording multiple parents of the constant.

Nevertheless, hat-trail tells me that the message
   "in h"
came from:
   <- {?}
   <- error "in h"
   <- h

which is accurate, and only reflects the trivial nature of the program.

If you re-cast your program to make f, g, and h into functions,

    f :: () -> Int
    f () = g ()
    g () = h ()
    h () = error "in h"
    main = do { putStrLn "in main"; print (f ()) }

you will see a better result:

    <- {?}
    <- error "in h"
    <- h ()
    <- g ()
    <- f ()
    <- main

and each of those expressions has an associated source position
that you can view with the :source command (for usage), or :Source
(for definition).

> Also, hat-trail failed to properly restore the tty state after ":q".

This has been reported by several people, but I can't reproduce
it on my gnome-terminal.  What terminal emulation are you using?
Can you tell me the results of 'stty' on a normal terminal window,
and also on a corrupted window?  Or if the latter is not possible, on a
corrupted window after you have reset it in the gentlest way you know?

Regards,
    Malcolm


More information about the Hat mailing list