[Update documentation ready for hat-2.02 release. malcolm**20030326165314] { hunk ./docs/browser-detail.html 1 -Advanced Redex Trails - -
- -
-

Redex Trail Browser:

-

bugs and wish-list

-
-
- -

-This is a fuller list of bugs and wishes for -the prototype tracing system Hat's redex trail browser, -hat-trail-in-java. -(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

-

-

    -
  • (FIXED) Exiting the trace browser does not implicitly disconnect from - any connected residual computation. This leaves the socket/port in an - unusable state. -
  • -
  • (FIXED) Related to above: If the browser chrashes because of ony of the other bugs listed here, then it leaves the socket/port in an unusable state. Only after about 10 minutes the operating system frees it and then the browser can be used again. -
  • Concerning scripts: -
      -
    • In script recording, every object the mouse passes over on the - screen results in a recorded selection -- only the last such - selection before a specific action should be recorded. -
    • -
    • (FIXED) In script playback, synchronisation between the explanatory messages - and the actions in the browser is poor. Either the action happens - before the description, or vice versa. It would be better to - ensure that action and description happen simultaneously. On some - occasions, actions should happen independently from the description, - but this is a less-common mode of use. -
    • -
    • In script playback, often the cursor position is not correctly - displayed: for a large red box, the cursor is shown in the centre - of the box, but this is not where it would need to be (in normal - use) to cause that box. -
    • -
    • In script playback, hiding visible trails by collapsing them - (denoted by dotted underlining) doesn't work - they stay visible. -
    -
  • If a complete sequence of parents up to the root is shown by the browser, then left clicking on any of the redexes leads to the incorrect error message "The selected component has no trace". -
  • Left clicking on any redex of an incomplete sequence of parents shows the next parent. This behaviour contradicts the html-description. -Furthermore it means that it is currently only possible to fold a complete sequence of parents by left clicking on the child that starts the sequence (and which is a subexpression of some other application). It is not possible to partially fold such a sequence. -
  • If the shown trace is longer than the trace window, then expansion of any trace causes a jump to somewhere in the middle of the trace. This hopping is very annoying. -
  • (FIXED) A string is always displayed as a single unit. That makes it impossible to select a substring which may have a different parent. -
  • Single element lists are (always?) shown as (:) 1 [] instead of 1:[]. In fact, [1] seems desirable if all subexpressions of the list have the same parent as the list (and hence selection of subexpressions is useless). -
  • A section (2:) is printed as ((:) 2). First, section is shorter. Second, original program structure should be preserved. -
  • The fromInteger in front of numeric constants that are introduced by the compiler are annoying. Problem of browser or of redex trails? -
  • A faulty program might not output anything, that is, execute putStr "". Then there is nothing to select in the output window and no way to look at the trace! -
  • (FIXED) Linking to the source code does not always work: the browser states that it loads the program source, but then just stops. Probably the bug is in the tracing runtime system. Nonetheless, the browser should give up after a short period and show an error message. No way to reliably reproduce the bug has been found yet. It is unclear under which circumstances loading a program source does not work. -
  • To change the font size the user currently has to hit enter in the dialogue box, just clicking ok doesn't make the change. Also the standard font size seems to be too big. Maybe the browser can determine the standard font size used by the user for other programs and that is used at the beginning? -
  • The siblings of the selected expression are shown in blue. If the selected expression is only a simple name, then it is not shown in blue. However, if it is a more complex expression, then it is shown in blue for all subexpressions that have the same parent. This behaviour is inconsistent. A single name should be shown in blue as well. -
  • More a problem than a bug: The siblings of the selected expression are shown in blue. However, subexpressions of siblings which have a different parent are not shown in blue. So if the sibling is just an application whose function and argument have different parents, than there is nothing which can be marked in blue. -
- -

Wishes

-

-

    -
  • In script playback, to show mouse-clicks in the original session - it would be nice to display a small mouse diagram near the cursor - with the relevant button shaded. -
  • -
  • The various colour highlightings in the tracer window are confusing for beginners. Hence the option menu should permit to turn some features off. These include highlighting of parents and siblings. Both these features are not necessary, only helpful. When the trace browser is run for the first time the default setting should be that all these features are turned off. -
  • It should be possible to save the options. -
  • Options that are not for the user but for the development of the trace browser should be moved to a separate place. -
  • In the program source only the beginning of an expression is -marked. The marking should indicate where the expression in question -ends. -
  • The program source should be linked closer to the browsing of the trace. So the currently selected expression should be marked in the source code, if it happens to be visible at the moment (maybe the whole function definition should be marked). Maybe there should be an optional mode where the source window follows all selections in the trace window. -
  • Many subexpressions e of a redex have the same parent. If all subexpressions of e have the same parent as e, then it should not be possible to select e. This restricts the user from performing some rather fruitless operations. (General goal: restrict the number of choices the user has to avoid confusion). -
  • (FIXED) should order in a case redex be reversed? Write f 4 |> True instead of True <| f 4 -
  • (FIXED) The source code window should give the name of the module it shows. -
- -
-

-This page last modified: 2002-03-08. -
- -

- - rmfile ./docs/browser-detail.html hunk ./docs/bugs-tools.html 1 -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. -
- -

- - rmfile ./docs/bugs-tools.html hunk ./docs/bugs.html 7 -

Hat 2.00 Bugs and Limitations

+

Hat 2.02 Bugs and Limitations

hunk ./docs/bugs.html 12 -This is a list of all known bugs and limitations in Hat 2.00. +This is a list of all known bugs and limitations in Hat 2.02. hunk ./docs/bugs.html 32 -
  • Fixed in Hat 2.00 - hat-trans does not handle source programs with (..) in export - or import lists. -
  • -
  • Fixed in Hat 2.00 - 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 does not export selectors for field labels. -
  • -
  • Not a bug. - The grandparent of the subject expression in an if/case/guard - is recorded as its parent. -
  • +
  • hat-trans generates type-incorrect code for FFI declarations + (foreign imports). hunk ./docs/bugs.html 39 -
  • Programs that exhaust memory fail with no trace.
  • +
  • Programs that exhaust memory fail with an incomplete trace file.
  • hunk ./docs/bugs.html 62 -
  • Fixed in Hat 2.00 - Viewing tools can hang where a cycle in a graph of trusted computation - includes a projection. (Example program: FunMod) -
  • -
  • Fixed in Hat 2.00 - A unit value () causes both hat-trail and hat-observe to - crash with head []. (Example program: Cycles) -
  • hunk ./docs/bugs.html 86 -
  • Fixed in Hat 2.00 - hat-observe reports no match found given an application pattern - ... in c where c has a 0-arity definition, even if matching - applications do occur in c. (Example program: ObsInCaf) -
  • hunk ./docs/bugs.html 120 -This page last modified: 5th February 2003
    +This page last modified: 13th March 2003
    hunk ./docs/config.html 162 + +http://www.haskell.org/hat/
    hunk ./docs/copyright.html 19 -Olaf Chitil and Malcolm Wallace, 2000-2002. Part of this tool is +Olaf Chitil and Malcolm Wallace, 2000-2003. Part of this tool is hunk ./docs/copyright.html 28 -2001-2002. The hat-observe and hat-detect browsing +2001-2003. The hat-observe and hat-detect browsing hunk ./docs/copyright.html 107 + +http://www.haskell.org/hat/
    hunk ./docs/copyright.html 113 -2002.06.11
    +This page last updated: 13th March 2003
    hunk ./docs/cvs.html 12 -Hat sources. Although Hat is distributed separately from -the nhc98 compiler, it shares some of the same source files, -so the CVS development version is still part of the same source tree -as nhc98. To play with the Hat sources you will therefore -have to checkout the nhc98 CVS module. +Hat sources. Although originally Hat was intimately +connected with the nhc98 compiler, it is now available +completely separately. hunk ./docs/cvs.html 21 -first. To get read-only access to our repository: +first. To get read-only access to the repository: hunk ./docs/cvs.html 24 -
  • You need to have ssh (secure shell) installed, and it must - support SSH protocol version 1.5. (Protocol version 2.0 and above - will not work with our server.) -
  • Set your CVS_RSH environment variable to ssh. +
  • Obviously, you need to have the cvs command installed. hunk ./docs/cvs.html 28 - $ cvs -d :ext:anoncvs@hinken.sparud.net:/cvs checkout nhc + $ cvs -d :pserver:anoncvs@glass.cse.ogi.edu:/cvs login + Password: cvs + + You only need to supply the password once, because cvs will squirrel + it away for future use in $HOME/.cvspass. + +
  • To checkout the hat sources, use this command: +
    +      $ cvs -d :pserver:anoncvs@glass.cse.ogi.edu:/cvs checkout hat
    hunk ./docs/cvs.html 38
    -     The checked-out source tree for nhc98 will appear in a
    -     directory called nhc.  You can rename this directory to
    -     whatever you like, CVS won't mind.
    -
  • From then on, you should no longer need the -d option, + The checked-out source tree will appear in a directory called + hat. You can rename this directory to whatever you + like, CVS won't mind. +
  • From then on, you should no longer need the -d blah option, hunk ./docs/cvs.html 93 -For instance, make basic gives you the standard compiler, and -make all gives you profiling and tracing variants in addition. +For instance, make hat gives you everything, but make +hat-tools gives you just the browsing tools. hunk ./docs/cvs.html 99 -The log messages of all CVS commit actions are sent to the mailing list -cvs-nhc98@haskell.org. If you wish to see who is making -changes, why, and and what they say about them, please do join this -list - see +The log messages of all CVS commit actions are currently sent to the +mailing list cvs-nhc98@haskell.org. If you wish to see who +is making changes, why, and and what they say about them, please do +join this list - see hunk ./docs/cvs.html 108 -Core developers of nhc98 and Hat have write-access -to the CVS repository. As a reminder, they should use a slightly -different address for an initial checkout of the tree: +Core developers of hat have write-access to the CVS +repository. They need to use a slightly different procedure for +accessing the source tree: + +
      +
    • You need to have ssh (secure shell) installed. +
    • Set your CVS_RSH environment variable to ssh. +
    • The first time you access the repository, you'll need to do + the following: hunk ./docs/cvs.html 118 - $ cvs -d :ext:username@hinken.sparud.net:/usr/src/master checkout nhc + $ cvs -d :ext:username@cvs.haskell.org:/home/cvs/root checkout hat hunk ./docs/cvs.html 120 -All the other instruction are the same, except that developers also +
    + +

    +All the other instructions are the same, except that developers also hunk ./docs/cvs.html 126 +

    Gaining write-access

    +

    +To obtain write-access to cvs.haskell.org, you need to ask the +Haskell CVS maintainer - Jeff Lewis <jlewis@galconn.com> - for +an account. The details are on the + +GHC CVS cheat-sheet (Section 2.1.2). + + hunk ./docs/cvs.html 140 + +http://www.haskell.org/nhc98/
    hunk ./docs/cvs.html 146 -This page last modified: 2002.06.18
    +This page last modified: 13th March 2003
    hunk ./docs/download.html 13 -Please note that Hat is no longer distributed as part of the nhc98 -compiler, but is completely independent. +Since version 2.00, Hat has been distributed completely independently +of the nhc98 compiler. hunk ./docs/download.html 44 - 2003-02-xx - 1.5Mb + 2003-03-26 + 1.4Mb hunk ./docs/download.html 115 - 2003-02-xx + 2003-02-26 hunk ./docs/download.html 171 -This page last modified: 5th February 2003
    +This page last modified: 26th March 2003
    hunk ./docs/faq.html 70 + +http://www.haskell.org/hat/
    hunk ./docs/index.html 35 -

    - Version 2.00 released 14th June 2002.
    +
    new + Version 2.02 released 26th March 2003.
    hunk ./docs/index.html 329 + +http://www.haskell.org/hat/
    hunk ./docs/index.html 335 -This page last modified: 5th February 2003
    +This page last modified: 26th March 2003
    hunk ./docs/install.html 28 - http://www.cs.york.ac.uk/fp/hat/download.html + http://www.haskell.org/hat/download.html hunk ./docs/install.html 83 - time (mins) + time (mins) hunk ./docs/install.html 86 - Solaris
    sparcIIi (270MHz) - Linux
    ppc (300Mhz) hunk ./docs/install.html 90 - 41 - - - 13 - - + 22 + 17 hunk ./docs/install.html 94 - 43 - 40 - 20 - 12 + 48 + 25 hunk ./docs/install.html 124 + +http://www.haskell.org/hat/
    hunk ./docs/install.html 130 -This page last modified: 5th February 2003
    +This page last modified: 13th March 2003
    hunk ./docs/libraries.html 168 -http://www.haskell.org/hat/ +http://www.haskell.org/hat/
    + +http://www.cs.york.ac.uk/fp/hat/ hunk ./docs/limitations-detail.html 1 -Advanced Redex Trails - -
    - -
    -

    Advanced Redex Trails:

    -

    limitations, bugs, and workarounds

    -
    -
    - -

    -This is a fuller list of limitations, bugs, and workarounds in -the prototype tracing system, Hat. -(There is also an overview page, and a -more detailed page about the browser -interface.) -Please mail us at - ART-team@cs.york.ac.uk -to report any new limitations, bugs, and workarounds that you discover. - -

    Bugs and holes in the current trace compiler:

    -

    - -

    -
    The traced program evaluates too much
    -
    -The traced program -
    -main = print (True || h True)
    -   
    -h = h
    -
    -does not terminate. The reason is that the trace transformation assumes that all -values of type R t are of the form R v Trace. In the example the Sat for h True has to be constructed (to be able to show the expression). h has value R h' (Nm "h"). Then h' is applied to R True (Nm "True"). However, h' has value bottom and hence the value of this application is also bottom, that is, is not of the form R v Trace. -

    -This program has the additinal problem that it cannot be interrupted with Control-C. Interruption is only possible when reduction of a traced application is entered, not such an internal, real application. -

    -main = print (True || h True True)
    -   
    -h x = h x
    -
    -This does not terminate for the same reason as above. It can, however, be interrupted and finally runs out of heap. - -
    Oversaturated applications are not shown correctly
    -
    -
    -main = print ((h True) True)
    -h x = f
    -f x = False
    -
    -correctly gives h True as parent of f and main as parent of f True, but -
    -main = print (h True True)
    -h x = f
    -f x = False
    -
    -incorrectly gives h True True as parent of f -and also of f True! -

    -Oversatured applications are handled completely the wrong way round by the transformation. There is no code to every create an App trace node for the saturated application f True. -

    - -
    Overloaded numeric constants all fixed
    -
    literal Integers in patterns cause an "fsExp: strange expression" - compiler error
    - (fixed, August 2000) -
    -
    literal Ints/Integers in definitions cause an "fsExp: strange expression" - compiler error
    - (fixed, July 2000) -
    -
    literal floats cause an "overloaded rational" compiler error - (fixed, August 2000) -
    - -
    Pattern bindings are projections but not handled as such
    -
    -Example: -
    -translateStatement symboltable startAddress (Assignment identifier exp)
    -    = (expCode ++ [Sto varAddress], expCodeLength+1)
    -    where
    -    (expCode, expCodeLength) = translateExpression symboltable startAddress exp
    -    Just varAddress = tableRead identifier symboltable
    -
    -The parent of the value of varAddress should be tableRead .... Instead the parent is the parent of the object that was originally inserted into the table. Here definitely reductions are not recorded in the trail. -
    - -
    Strictness annotations in data type definitions
    - -
    are not transformed correctly. With tracing, the data constructor is no longer strict in an argument annotated with !. -Example: -
    -data Test = T !Bool
    -
    -f (T x) = True
    -
    -t = error "Hello"
    -
    -main = print (f (T t))
    -
    -With tracing this program prints True, although it should abort with the error message "Hello". -
    - -
    Type Synonyms
    - -
    Type synonyms for arrow types are not necessarily translated correctly. -In fact, at the moment they are not translated at all. -
    - -
    newtype (fixed 18/8/00)
    -
    A newtype often leads to a segmentation fault of the traced program. -More precisely, pattern matching on the data constructor yields a nonsense value, probably a pointer is interpreted as data constructor. -For example: -
    -newtype Test = T Int
    -
    -f (T x) = x
    -
    -main = print (f (T 3))
    -
    -yields 13493678. -
    - -
    Higher-Order Types
    -
    Data types with type variables of a kind beyond simple * cannot be handled by the transformation. Currently not even the normal nhc can handle them.

    -When the latter problem is solved (or for a nhc independent version), the tracing transformation can be changed to handle higher-order type variables. -We introduce a data type -

    -newtype Fun a b = Trace -> R a -> R b
    -
    -and the transformation replaces all ->'s by Fun. -
    - -
    Records
    -
    Records are currently not supported.
    - -
    Derived Classes (fixed, July 2000)
    -
    Derived classes do not work correctly. Hence read does not work when derived. It demands an instance of class Read for the tracing type R.
    -The cause is that data types are transformed for tracing before deriving. The order should be reversed. - -
    Prelude and Libraries
    -
    libraries Array, Directory, etc. missing -
    -
    functions readFile, appendFile - are missing from library IO
    -
    more generally, output IO is `special' because the tracer has to - record it such that the user can later select trails from it. - Thus, it is unclear what the meaning of many IO functions should be.
    - -
    Unidentified bugs
    -
    on one occasion the compiler stopped with No match in _dCaf -
    -
    on a few occasions the compiler crashed with heap overrun -
    -
    - -

    Bugs and holes in the run time system part for tracing

    - -
    -
    Our of heap space
    -
    Currently also a tracing program just abort, if it runs out of -heap space. It should connect to the browser instead. Probably the same problem occurs, if the program runs out of stack space.
    -
    Runtime system crashes
    -
    -Program exited normally.
    -in_bind_ne: bindin_bind_ne: resolver error. Host = LOCAL
    -in_bind_ne: in_bind RETURNED BAD VALUE: -1
    -
    -This seems to happen when the browser has just been started and may still be initialising, not yet able to communicate. -
    -
    - -

    Wishes

    - -
    -
    Trusting derived instances
    -
    Currently derived instances have the same trusting status as the module in which they are derived. However, these instances should be trusted, because they are derived automatically. Possibly an additional compiler flag would permit to make these instances untrusted.

    -The same applies to other compiler-generated code, e.g. to the automatically created selectors for field names. -

    - -
    -

    -This page last modified: 2001.01.17.
    - -

    - - rmfile ./docs/limitations-detail.html hunk ./docs/limitations.html 1 -Hat 1.12 Bugs and Limitations - - -
    -

    Hat 1.12 Bugs and Limitations

    -
    -
    - -

    -This is a list of some known limitations and bugs in Hat 1.12. -Please mail - nhc-bugs@haskell.org -to report any other problems you find. - -

    Compile-time problems:

    -

    -

    -
    Type variables of higher kinds have only limited support.
    - -
    Libraries Time and Locale - are missing.
    - -
    Rarely, the compiler fails with heap overrun.
    - -
    Very rarely, the compiler fails with No match in _dCaf.
    - -
    More details about compile-time problems are listed - here.
    -
    - -

    Run-time problems:

    -

    -

    -
    Programs that exhaust memory fail with no trace.
    - -
    Strictness annotations in data type definitions lose their -effect.
    -
    - -

    Problems with viewing a trace

    - -

    General

    -
    -
    Records are not traced at source level.
    - -
    List comprehensions are not traced at source level.
    - -
    Monadic do expressions are not traced at source level.
    - -
    Some numeric expressions are not traced at source level.
    - -
    Super-saturated applications are not shown correctly.
    - -
    Traces involving pattern bindings may be incomplete.
    -
    - -

    Hat-observe

    - -
    -
    Hat-observe cannot compare infinite data structures attempting - to generalise across several equations. Use Ctrl-C to kill it.
    -
    - -

    Hat-detect

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

    Hat-trail

    - -
    -
    Scrolling sometimes blanks the upper part of the display when - the trace is extended and is deeper than the window.
    - -
    If the output is empty, it cannot be selected.
    -
    - -
    More details about browser bugs and wishes are listed - here.
    - -
    -

    -This page last modified: 15 Mar 2002
    - - - rmfile ./docs/limitations.html hunk ./docs/maillist.html 42 + +http://www.haskell.org/hat/
    hunk ./docs/maillist.html 48 -2002.06.11
    +This page last updated: 11th June 2002
    hunk ./docs/publications.html 20 -Preliminary version, August 2002, 40 pages. +Preliminary version, August 2002, 40 pages. (Final version to appear +in Springer LNCS series, 2003.) hunk ./docs/publications.html 39 -
    Postscript (103 KB) +
    Postscript (preliminary version) (103 KB) hunk ./docs/publications.html 44 -submitted to International Workshop on the Implementation of Functional -Languages, Madrid, Sept 2002, 17 pages. +in International Workshop on the Implementation of Functional +Languages, Madrid, Sept 2002, 17 pages, final version to appear +in Springer LNCS series, 2003. hunk ./docs/publications.html 58 -
    Postscript (84 KB) +
    Postscript (preliminary version) (84 KB) hunk ./docs/publications.html 88 +FInal version to appear in ENTCS. hunk ./docs/publications.html 200 -This page last modified: 14 August 2002
    +This page last modified: 14 March 2003
    hunk ./docs/requirements.html 13 -To build and use Hat, you will need GNU make, a C compiler (usually -gcc), a Haskell'98 compiler that supports the standard FFI, and -hmake. Here are the minimum versions of compilers that we -recommend: anything earlier than these is unlikely to interoperate -correctly with Hat-2.02. +To build and use Hat, you will need +

      +
    • a Haskell'98 compiler that supports the standard FFI (i.e. + nhc98 or + ghc) +
    • the hmake compilation manager +
    • GNU make +
    • a C compiler (usually gcc) +
    • the Gnu glib + data structure library +
    • at least 128Mb of memory (256Mb with ghc -O) +
    • disk space: 30Mb (nhc98), 50Mb (ghc) +
    +Here are the minimum versions of software that we recommend: anything +earlier than these is unlikely to interoperate correctly with Hat-2.02. hunk ./docs/requirements.html 31 -compilerminimum version -gcc2.8.1 +softwareminimum version hunk ./docs/requirements.html 35 +gcc2.8.1 +glib1.2.0 hunk ./docs/requirements.html 49 -X windows, and in particular the xterm terminal emulator -supporting ANSI colour codes. This is used when you start one -browsing tool from within another, to bring up a new text window. -Unfortunately, we don't know what the equivalent would be in a -Windows environment, so for the moment, Windows is not supported. -(For MacOS X, you should install the Apple XFree86 server, or an -equivalent, to be able to use xterm.) +X windows, in particular the resize command, and the +xterm terminal emulator supporting ANSI colour codes. This is +used when you start one browsing tool from within another, to bring +up a new text window. If you are using the Windows operating system, +then Cygwin is the appropriate +environment to use - it includes the eXceed X-server. For MacOS X, +you should install the Apple +XFree86 server, or an equivalent. hunk ./docs/requirements.html 95 + +http://www.haskell.org/hat/
    hunk ./docs/requirements.html 101 -This page last modified: 5th February 2003
    +This page last modified: 13th March 2003
    hunk ./docs/status.html 20 -

    Hat 2.02 (2003-02-xx) features

    +

    Hat 2.02 (2003-03-26) features

    hunk ./docs/status.html 23 - the distribution includes a tracing version of the + the distribution includes a tracing version of (a subset of) the hunk ./docs/status.html 32 - when building Hat with ghc, you will get another 20-40% + when configuring Hat for ghc, you will get another 20-40% hunk ./docs/status.html 62 +
  • Numerous other small bugfixes in the various trace browsing tools. hunk ./docs/status.html 94 + +http://www.haskell.org/hat/
    hunk ./docs/status.html 100 -This page last modified: 2002.06.14
    +This page last modified: 26th March 2003
    hunk ./docs/todo.html 1 -Hat 2.00 Wish List +Hat 2.02 Wish List hunk ./docs/todo.html 7 -

    Hat 2.00 Wish List

    +

    Hat 2.02 Wish List

    hunk ./docs/todo.html 12 -This is a list of wishes (not bugs) to improve Hat 2.00. +This is a list of wishes (not bugs) to improve Hat 2.02. hunk ./docs/todo.html 18 -
      +
        hunk ./docs/todo.html 21 -1. backspace to correct slips in : command-lines - (Use stty erase ^H) + backspace to correct slips in : command-lines + (Use stty erase ^H) hunk ./docs/todo.html 25 -2. separate cutoff length for strings from general cutoff depth + separate cutoff length for strings from general cutoff depth hunk ./docs/todo.html 28 -3. advice for users wishing to use hat but not hmake + advice for users wishing to use hat but not hmake hunk ./docs/todo.html 31 -4. in hat-trail :o [application-pattern] should work - (Done) + in hat-observe allow application patterns after "in" hunk ./docs/todo.html 34 -5. in hat-observe :o [application-pattern] => new window not wizard! - (Done) + in hat-observe an option to show the number of instances of + each uniquely represented application hunk ./docs/todo.html 38 -6. in hat-observe support :i [module-name] -- if no module specified, - split listing into sections headed by module name - (Done) - -
      1. -7. in hat-observe allow variables in application patterns to be - qualifed by module name - (Done) - -
      2. -8. in hat-observe :I to list recorded constructor applications - (Done) - -
      3. -9. in hat-observe an option to suppress display of results - (Done) - -
      4. -10. in hat-observe allow application patterns after "in" + in hat-observe bring back % progress indicators hunk ./docs/todo.html 41 -11. in hat-observe an option to show the number of instances of - each uniquely represented application + in any viewing tool accept :S [qualified] name hunk ./docs/todo.html 44 -12. in hat-observe bring back % progress indicators - -
      5. -13. in any viewing tool accept :S [qualified] name - -
      6. -14. scrolling and resizing of source windows (with line numbers instead - of fixed source reference line) + scrolling and resizing of source windows (with line numbers instead + of fixed source reference line) hunk ./docs/todo.html 48 -15. viewing tools compare time-stamps of trace files with those - of sources and issue warning if appropriate + viewing tools compare time-stamps of trace files with those + of sources and issue warning if appropriate hunk ./docs/todo.html 51 -
      7. -16. get priority info from .hat file to avoid need for extra brackets - when infix operators are used (eg in application patterns) - (Done) - -
      8. -17. notation: replace (_IO_) by {IO}; replace {_} by {?} - (Done) - -
    + hunk ./docs/todo.html 54 -
      +
        hunk ./docs/todo.html 57 -1. combine traced and untraced modules by a more drastic wrapping - (eg. data structures of type T computed within the wrapped module - recorded as {T}) and subclassing to get around mismatch of - method types (eg. Ord T => TOrd T and Ord a => Ord (R a)) + combine traced and untraced modules by a more drastic wrapping + (eg. data structures of type T computed within the wrapped module + recorded as {T}) and subclassing to get around mismatch of + method types (eg. Ord T => TOrd T and Ord a => Ord (R a)) hunk ./docs/todo.html 63 -2. support tracing of locally defined functions by recording - bindings for free variables (eg. add refs to static parent - names in local name nodes and extend local argument lists to - include free variables defined within top-level parent with - the name entries for these variables) + support tracing of locally defined functions by recording + bindings for free variables (eg. add refs to static parent + names in local name nodes and extend local argument lists to + include free variables defined within top-level parent with + the name entries for these variables) hunk ./docs/todo.html 70 -3. with or without 2, hat-observe to support observation of - locally defined functions or data values if :set locals on. - Locals to be listed by :i (indented below their parents?) - and observations of locals to be split into same-instance - groups (headed by whatever contextual bindings for variables - are available) + with or without 2, hat-observe to support observation of + locally defined functions or data values if :set locals on. + Locals to be listed by :i (indented below their parents?) + and observations of locals to be split into same-instance + groups (headed by whatever contextual bindings for variables + are available) hunk ./docs/todo.html 78 -4. extensional observation by hat-observe of a (\..) selected - in hat-trail (important to ensure that all observations - are of exactly this function not just a function with same - source) + extensional observation by hat-observe of a (\..) selected + in hat-trail (important to ensure that all observations + are of exactly this function not just a function with same + source) hunk ./docs/todo.html 84 -5. evaluation windows with bindings to selected expressions - from trace viewers (quite easy for expressions that only contain - top-level function names and/or fully evaluated data; anything - else poses representation problems) + evaluation windows with bindings to selected expressions + from trace viewers (quite easy for expressions that only contain + top-level function names and/or fully evaluated data; anything + else poses representation problems) hunk ./docs/todo.html 90 -6. hat-trail to list the sequence of IO actions, not just text - output to stdout + hat-trail to list the sequence of IO actions, not just text + output to stdout hunk ./docs/todo.html 94 -7. further decompose textual output into pieces connected by ++ + further decompose textual output into pieces connected by ++ hunk ./docs/todo.html 97 -8. hat-trail to support multiple steps along trails Eg: - - to nearest ancestral application of any top-level function - - to nearest ancestral application of a named function - - to nearest non-recursive ditto + hat-trail to support multiple steps along trails Eg: + - to nearest ancestral application of any top-level function + - to nearest ancestral application of a named function + - to nearest non-recursive ditto hunk ./docs/todo.html 103 -9. hat-trail to support single-step forward reduction from a redex - (perhaps shown as indented lines starting ->) + hat-trail to support single-step forward reduction from a redex + (perhaps shown as indented lines starting ->) hunk ./docs/todo.html 107 -10. option to assert trust in named modules or top-level functions - in all trace-viewing tools + option to assert trust in named modules or top-level functions + in all trace-viewing tools hunk ./docs/todo.html 111 -11. hat-detect for new-format traces including correct handling - of untrusted computation in a trusted context and an option - to show all children of current EDT node + hat-detect for new-format traces including correct handling + of untrusted computation in a trusted context and an option + to show all children of current EDT node hunk ./docs/todo.html 116 -12. generalise hat-observe to hat-query, with a user-programmable - query language for more general and powerful access to the - hat trace than current commands + generalise hat-observe to hat-query, with a user-programmable + query language for more general and powerful access to the + hat trace than current commands hunk ./docs/todo.html 121 -13. user-programmable display of expressions in textual or graphical - form + user-programmable display of expressions in textual or graphical + form hunk ./docs/todo.html 125 -14. hat-observe option to see arguments and results of trusted - (and perhaps other) functions that have 0-arity definitions + hat-observe option to see arguments and results of trusted + (and perhaps other) functions that have 0-arity definitions hunk ./docs/todo.html 129 -15. a coordinating environment for tracing that, for example, - automatically closes trace windows when program is modified - and/or run again + a coordinating environment for tracing that, for example, + automatically closes trace windows when program is modified + and/or run again hunk ./docs/todo.html 134 -16. a tool that cleanly truncates a trace file as if the computation - had been interrupted at some specified break-point + a tool that cleanly truncates a trace file as if the computation + had been interrupted at some specified break-point hunk ./docs/todo.html 138 -17. more support in hat-trail for tracing parent uses of zero-arity - definitions and their source locations + more support in hat-trail for tracing parent uses of zero-arity + definitions and their source locations hunk ./docs/todo.html 142 -18. run-time options to report the number of reductions (or other - computational steps) in an untraced computation and to report - corresponding numbers (or better still, a % indicator) at - intervals during a traced computation + run-time options to report the number of reductions (or other + computational steps) in an untraced computation and to report + corresponding numbers (or better still, a % indicator) at + intervals during a traced computation hunk ./docs/todo.html 148 -19. make source windows active, for example allowing selection of - an application or function for observation in hat-observe + make source windows active, for example allowing selection of + an application or function for observation in hat-observe hunk ./docs/todo.html 152 -20. editable command lines with readline functionality + editable command lines with readline functionality hunk ./docs/todo.html 155 -21. special-purpose tool to locate black-holes in traces + special-purpose tool to locate black-holes in traces hunk ./docs/todo.html 158 -22. add an evaluation bit to projection/forward nodes allowing - {_}/{?} to be displayed as _ where appropriate + add an evaluation bit to projection/forward nodes allowing + {_}/{?} to be displayed as _ where appropriate hunk ./docs/todo.html 161 -
    + hunk ./docs/todo.html 164 -
      +
        hunk ./docs/todo.html 167 -1. option to show lambda expressions in full + option to show lambda expressions in full hunk ./docs/todo.html 170 -2. a graphical user interface for hat viewers + a graphical user interface for hat viewers hunk ./docs/todo.html 173 -3. always display error "... message ..." if available, not _|_ + always display error "... message ..." if available, not _|_ hunk ./docs/todo.html 176 -4. a Free Navigation viewer + a Free Navigation viewer hunk ./docs/todo.html 179 -5. support for tracing stateful monadic computations in terms + support for tracing stateful monadic computations in terms hunk ./docs/todo.html 183 -6. option to use unification instead of one-way matching with + option to use unification instead of one-way matching with hunk ./docs/todo.html 187 -7. :o in hat-trail to use the currently selected expression as + :o in hat-trail to use the currently selected expression as hunk ./docs/todo.html 190 -
    + }