Yale Haskell

Yale Haskell

(language)A fully integrated Haskell programmingenvironment. It provides tightly coupled interactive editing,incremental compilation and dynamic execution of Haskellprograms. Two major modes of compilation, correspond toLisp's traditional "interpreted" and "compiled" modes.Compiled and interpreted modules may be freely mixed in anycombination.

Yale Haskell is run using either a command-line interface oras an inferior process running under the Emacs editor.Using the Emacs interface, simple two-keystroke commandsevaluate expressions, run dialogues, compile modules, turnspecific compiler diagnostics on and off and enable anddisable various optimisers. Commands may be queued uparbitrarily, thus allowing, for example, a compilation to berunning in the background as the editing of a source filecontinues in Emacs in the foreground.

A "scratch pad" may be automatically created for any module.Such a pad is a logical extension of the module, in whichadditional function and value definitions may be added, butwhose evaluation does not result in recompilation of themodule.

A tutorial on Haskell is also provided in the Emacsenvironment. A Macintosh version of Yale Haskell includesits own integrated programming environment, complete with anEmacs-like editor and pull-down menus.

Yale Haskell is a complete implementation of the Haskelllanguage, but also contains a number of extensions, including:

(1) Instead of stream based I/O, a monadic I/O system isused. Although similar to what will be part of the newHaskell 1.3 report, the I/O system will change yet againwhen 1.3 becomes official.

(2) Haskell programs can call both Lisp and C functionsusing a flexible foreign function interface.

(3) Yale Haskell includes a dynamic typing system. Dynamictyping has been used to implement derived instances in auser extensible manner.

(4) A number of small Haskell 1.3 changes have been added,including polymorphic recursion and the use of @_@ in anexpression to denote bottom. Although the 1.3 report is notyet complete, these changes will almost certainly be part ofthe new report.

(5) A complete Haskell level X Window System interface,based on CLX.

(6) A number of annotations are available for controllingthe optimiser, including those for specifying both functionand data constructor strictness properties, "inlining"functions, and specialising over-loaded functions. Manystandard prelude functions have been specialised for betterperformance using these annotations.

(7) Separate compilation (including mutually recursivemodules) is supported using a notion of a UNIT file, whichis a kind of localised makefile that tells the compilerabout compiler options and logical dependencies amongstprogram files.

(8) Yale Haskell supports both standard and "literate"Haskell syntax.

Performance of Yale Haskell's compiled code has been improvedconsiderably over previous releases. Although still not asgood as the Glasgow (GHC) and Chalmers (HBC) compilers,the flexibility afforded by the features described earliermakes Yale Haskell a good choice for large systemsdevelopment. For some idea of performance, Hartel's latest"Nuc" benchmark runs at about the same speed under both YaleHaskell and hbc. (Our experiments suggest, however, that YaleHaskell's compiled code is on average about 3 times slowerthan hbc.)

Binaries are provided for Sun/SPARC and Macintosh, butit is possible to build the system on virtually any systemthat runs one of a number of Common Lisp implementations:CMU Common Lisp, Lucid Common Lisp, Allegro Common Lispor Harlequin LispWorks. akcl, gcl and CLisp do nothave adaquate performance for our compiler. The currentversion is 2.1.

Yale.(128.36.13.1). UK. Sweden. E-mail:,.