Some thoughts on requirements for the ML works environment.

This splits roughly into two spearate sections. Firstly we have the
facilities we would like to provide (debugging, clever editing etc),
and secondly the means of interacting with them (windows, menus etc).
This whole discussion should be driven by what programmers want of an
ML system.

1. Facilities

a) Debugging

We require at least type debugging (assistance with correcting type
incorrect programs), and run time debugging (assistance with
correcting programs which fail to run in some way or other, either by
raising an unexpected exception, by looping indefinitely or by
delivering an incorrect result).

Using a type debugger it should be possible to add type information
temporarily in order to narrow down the cause of a problem, and to
browse the type inference process.

The run time debugger should be able to roll back execution to allow
continuation from some earlier point either with a different set of
values, or following some logically different path. Debugging should
be fully symbolic, and linked to the editor in order to allow source
display of the section under examination.

b) Editing

We require an editor with knowledge of ML structure in as much as this
is possible, with incremental type checking. The editor should be able
to locate definitions of objects within the source "at the press of a
button". It should interact with the type and run time debuggers to
display relevant source.

c) Standard packages

The environment should contain packages which could standardly be
found in ML systems, such as theorem provers and logical inference
engines.

2. Interaction

a) GUI

The interaction should be GUI based where possible, but with the
necessary short cuts/alternatives to allow entirely keyboard
non-window based use.
