# 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 hat@haskell.org 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

#### General

- 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

- 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)

#### Hat-trail

- 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

- 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