Hat Logo

Hat 2.00 Bugs and Limitations

This is a list of all known bugs and limitations in Hat 2.00. There is also a wish-list of features that we would like to add to Hat. Please mail to report any other problems you find.

hat-trans problems:

  • hat-trans does not handle source programs with (..) in export or import lists. Fixed in Hat 2.00
  • hat-trans output fails to compile if the source program depends on defaults to resolve numeric types.
  • hat-trans suffers a pattern-match failure if the source program has an empty import list. Fixed in Hat 2.00
  • hat-trans can transform pattern bindings with newtype data constructors incorrectly, duplicating variable definitions. Fixed in Hat 2.00
  • hat-trans output can fail at link time if the arity of source definitions or applications is large.
  • hat-trans output does not export selectors for field labels. Fixed in Hat 2.00
  • Data constructions in a trusted context are hidden if their components are unevaluated.
  • The grandparent of the subject expression in an if/case/guard is recorded as its parent. Not a bug.

Run-time problems:

  • Programs that exhaust memory fail with no trace.

Problems with viewing a trace


  • Named fields are not traced at source level.
  • List comprehensions, do statements, and arithmetic ranges are not traced at source level: they are recorded and displayed in de-sugared form.
  • Super-saturated applications are not shown.
  • Traces involving pattern bindings may be incomplete.
  • The viewing tools display some lists misleadingly: when the tail of a sugared list is cut off or undefined it is shown as if it was a final element.
  • A unit value () causes both hat-trail and hat-observe to crash with head []. (Example program: Cycles) Fixed in Hat 2.00
  • Viewing tools can hang where a cycle in a graph of trusted computation includes a projection. (Example program: FunMod)


  • hat-observe inappropriately lists trusted CAFs under :info and allows observations of CAF values that should be hidden.
  • hat-observe :info counts may not match the number of observations if there are partial or super-saturated applications. (Example program: MixArity)
  • hat-observe may incorrectly show applications as distinct when arguments include a cyclic structure. (Example program: Cycles)
  • ^C in a hat-observe window (to cut short a search) can shut down a hat-trail window spawned from the same hat-observe session.
  • After :set recursive off hat-observe shows the non-recursive calls of f even if given the application pattern f in f. (Exmaple program: ObsRec)
  • hat-observe report no match found given an application pattern ... in c where c has a 0-arity definition, even it matching applications do occur in c. (Example program: ObsInCaf)


  • Scrolling sometimes blanks the upper part of the display when the trace is extended and is deeper than the window. (Example program: BigExp)
  • If the output is empty, it cannot be selected.
  • The display can become corrupted if output or error message from the traced program is wider than the display window.
  • The display can become corrupted if a single trail expression or equation is large enough to scroll off the screen.


  • hat-detect is not currently included with the Hat browsing tools.
  • Only useable for computations that produce faulty output, not for computations that abort with an error message or are interrupted.
  • Does not work correctly for programs that read input.

This page last modified: 13th June 2002