# Bugs in Hat Tools

# Hat Tools:

### bugs and wish-list

This is a fuller list of bugs and wishes for the prototype tracing browsers in Hat. (There is also an overview page, and a more detailed page for the trail-building compiler.) Please mail us at ART-team@cs.york.ac.uk with any other bugs or wishes.

### Bugs in hat-trail

- Display blanking. The upper part of the display is blanked when the current expression causes previous expressions to scroll upwards, and the topmost expression is not exactly at the start of the page. (Test case: trace back recursive calls of player' in Adjoxo.)
- Indirections. Sometimes handled incorrectly? (Test case: Olaf to supply.)

### Wishes in hat-trail

- Interrupted evaluation. Distinguish this case from undefined. Display as redex = {interrupted} not redex = _|_.
- String and list navigation. [ and ] to become commands to move forward/backward to next/previous list element (implicit user claim that current selection is within a list).
- Selection and sharing. There should always be exactly one selected expression, clearly indicated by a unique form of highlighting. Thus, (1) the highlight should never vanish, and (2) there should not be multiple highlighting. [MAYBE: options to show sharing (1) in same redex/equation, or (2) everywhere, by a different form of highlighting.]
- Dependent source browsers. Should be closed when user quits hat-explore. Could usefully allow scrolling to see wider context. [MAYBE ONE DAY: extend source highlight to show entire expression or definition, not just its starting point.]

### Bugs in hat-observe

- Bogus reductions. Sometimes equations with identical LHS and RHS are shown: eg. observe reduceAll in TableauRefac v.3. (May be a problem of unknown arities and partial applications, more easily fixed with the new .hat format.)
- Application of the same function to two (separate but?) identical cyclic structures causes an infinite loop because of processing to find unique most general representatives.

### Wishes in hat-observe

- Identifier Info. The :info command should also show for each listed name a count SAT-C (+ SAT-B): eg. 173 (+ 2), or 0 (+ 3), but simplifying 64 (+ 0) to 64 and discarding items with 0 (+ 0) counts
- Patterns/equations after 'in'. Permit a pattern and/or equation on the RHS of 'in'. For example, observe f _ = True in g _ = False.
- Observing constructors. Should be possible -- for example, to check invariants respected. Corollaries: (1) hat-observe should also have an = toggle which is always toggled off for constructor observations (and restored to its previous state afterwards); (2) there should be a command analogous to i for constructors (an I command would be mnemonic because of the upper-case convention for constructors).
- Local observations. There could be an option (with suitable warning) to include locally-defined names among the observables. Not all depend on free variables anyway. Locals should perhaps be tagged in some way in the i listings (name in { }?). [MAYBE ONE DAY: support full observation of locals with context of free-variable bindings in .hat file. Add refs to static parent names in local name nodes; extend local argument lists to include free variables defined within top-level parent's (and name entries for these variables).]
- Families of bservations. [MAYBE: option to group observations with a common source for the application?]
- Separated observations. The user may want to observe each separate application (rather than unique most general representatives) because different applications have different contexts (if explored) and/or may have different unevaluated expressions beneath _'s. (The 'xu' flag is an unsafe and incomplete solution: it is not a first-class option and needs arity info to be correct.)

### Bugs in hat-detect

- hat-detect does not find calls to untrusted functions within trusted functions unless they are reachable from SAT for the trusted application. (Eg. calls of a filter predicate.) Fix requires a linear scan to find relevant untrusted applications, assuming accurate trustedness info in the .hat file -- Olaf says it should be "perfect" using the new portable transformation!
- hat-detect does not work for interrupted or failing computations. The new .hat format will make it easy to remedy this defect, but meanwhile a linear search could again provide a solution.

### Wishes in hat-detect

- A free navigation mode, to browse the full call-graph of the computation. As a small start: a command to list the immediate EDT children of the current equation.

### General bugs

- Haskell 98 gaps or bitterness: n+k, comprehensions, do-notation, etc.

### General wishes

- Merge pretty-printers for all tools to ensure consistency.
- Put arity information into .hat files (even before new format)?
- All tools to support changes in width of display window (ideally with automatic response, but at least after :resize).
- Tools should compare creation/modification times of sources, executable, trace and recorded output, and warn of apparent anachronisms.
- CAFs defined by higher-order expressions such as composition chains do not trace nicely (eg. one has to 'observe' inner calls before one can 'explore' them -- and even 'observe' may not reach them). Also, trusted CAFS (eg. Prelude functions such as reverse) give only the single observation of the CAF reduction, not applications. [MAYBE: de-CAF Prelude functions? Introduce "quasi-trusted" functions such as composition? (Cannot just make it untrusted or else all compositions within the Prelude would be recorded too.)]
- A "hat" tool that co-ordinates calls of specialised tools and keeps track of dependent windows etc.
- [MAYBE: Readline functionality in command-based tools.]
- Some people would like to animate reductions forwards rather than trace them backwards. [MAYBE ONE DAY: hat-animate when we have the new .hat format.]
- Further tools for call-graph, data-flow and black-hole tracing.
- Even faster construction of traces.

This page last modified: 15th March 2002.