Here, for your interest, is a freshly-updated summary of the current state of Haskell implementations, at least those known to us. Simon Peyton Jones, Glasgow University. Haskell: Current status ~~~~~~~~~~~~~~~~~~~~~~~~ [Simon Peyton Jones wrote the original version of this document, and he still maintains it. Many others, including all the main implementors, have helped. Please send corrections/comments to [EMAIL PROTECTED] Original version: April 1991; last checked: February 1993] The Haskell language ~~~~~~~~~~~~~~~~~~~~ In the mid-1980s, there was no "standard" non-strict, purely-functional programming language. A language-design committee was set up in 1987, and the Haskell language is the result. The Haskell committee released its report on 1 April 1990. A revised "Version 1.2" appeared in SIGPLAN Notices 27(5) (May 1992), along with a tutorial on Haskell by Hudak and Fasel. There is no further language development happening right now. You may learn more about the development of Haskell by consulting the "haskell" mailing-list archive, in pub/haskell/list-archive (at least at the Glasgow archive site). The Haskell mailing list ~~~~~~~~~~~~~~~~~~~~~~~~ There is an electronic mailing list to discuss technical issues related to Haskell. To join this list, send your request to "[EMAIL PROTECTED]" (Europe and Australasia) or "[EMAIL PROTECTED]" (rest of world) as appropriate. Standard archive sites for Haskell stuff ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can use anonymous FTP (username: anonymous; password: your e-mail address) to the following hosts, where you will find things in "pub/haskell" and its subdirectories. Site Host name Raw IP#s (these can change) Chalmers ftp.cs.chalmers.se 129.16.225.66 Glasgow ftp.dcs.glasgow.ac.uk 130.209.240.50 Yale nebula.cs.yale.edu 128.36.13.1 UKUUG src.doc.ic.ac.uk 146.169.2.1 (languages/haskell mirrors Glasgow) Note: Specialised material related to a specific implementation (e.g., HBC binaries for the Obscuro 1000) may only be at the implementation's "home site". Freely-available implementations of Haskell ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This information was mostly supplied by the implementors. All of the systems are provided with sources, and often with pre-built binaries for popular machines. It will be obvious if you peer into one of the FTP sites... The Glasgow Haskell compiler ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The Glasgow compiler has the following attributes: * A batch compiler that runs under Unix. The current version is 0.10, released in December, 1992 (the first usable public release). * Known to work on Sun3s and Sun4s. * Almost all of Haskell is implemented. In particular, the full range of data types is supported: arbitrary precision integers, rationals, double-precision floats, and "real" arrays with O(1) access time. (The release notes list all unimplemented language features.) * Written in Haskell, generates C as its target code -- hence some chance of wide portability. * Specifically designed to act as a "motherboard" into which others can "plug in" their own strictness analyser, profiler, front end, back end, or other special pass. * An extensible I/O system is provided, based on a "monad". (The standard Haskell I/O system is built on this foundation.) * A number of significant language extensions are implemented: - Fully fledged unboxed data types. - Ability to write arbitrary in-line C-language code, using the I/O monad to retain referential transparency. - Incrementally-updatable arrays, also embedded in a monad. - Mutable reference types. * By default, the system uses a generational garbage collector which lets you run programs whose live data is significantly larger than the physical memory size before thrashing occurs. (Conventional 2-space GC starts thrashing when the live data gets to about half the physical memory size.) * A new profiling system is supplied, which enables you to find out which bits of your program are eating both *time* and *space*. * Good error messages. Well, fairly good error messages. Line numbers are pretty accurate, and during type checking you get several (accurate) error reports rather than just one. * Execution performance: similar to Chalmers hbc. * We have a pretty good test suite, and the current version (0.10) passes practically all of it. (Yes, it can compile itself, too.) We hope you will find the system to be robust. * Highly configurable runtime system. Heavy use of C macros means that you can modify much of the storage representation without telling the compiler. For example, the system comes with 4 different garbage collectors! (all working) * Internals: extensive use of the second-order lambda calculus as an intermediate code; the Spineless Tagless G-machine as evaluation model Current status (February 1993): If you are a Haskell programmer: the system is entirely serviceable, but may exhibit some quirks (inevitable in a new system). Don't bet the farm on it (just yet). If you are a Haskell implementor: it is useful now and may be the best Haskell for your purposes. Contact: Simon Peyton Jones Department of Computing Science Glasgow University Glasgow, Scotland G12 8QQ [EMAIL PROTECTED] The Glasgow Haskell distribution is available from the standard archive sites, in pub/haskell/glasgow. It is also available by NIFTP (UK only); please ask if you need details. Some papers by members of the Glasgow FP group are in pub/glasgow-fp, at ftp.dcs.glasgow.ac.uk (only). The Chalmers compiler: hbc/hbi ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The Chalmers Haskell-B compiler implements full Haskell 1.2, as well as some optional extensions. It is written by Lennart Augustsson, and based on the classic LML compiler by Augustsson and Johnsson. Status (February 1993): * hbc is a batch compiler that runs on a Unix(-like) machine. The current version is 0.999.3, released in February 1993. * The interactive system hbi is an interpreter for Haskell, but it can also load code compiled with hbc. * Generates native code and runs on SUN4, DECstation, Sequent Symmetry, SUN3, and PCs running Linux or 386BSD. (Unsupported versions for NS32000, RT/PC, CRAY, SUN3, VAX, ARM, and RS6000.) * Has several optional extensions to Haskell. The most interesting ones are probably the existentially quantified types and the extended set of I/O requests. * Comes with a library of useful modules such as: list utilities, file I/O utilities, pretty printing, parsing, bit manipulation, random numbers, and more. * Can generate code for both time and heap profiling. * Haskell and LML code can be mixed. * Comes with a nice (but as yet incomplete) interface to X windows. This interface, called Fudgets, is written from the Xlib level and up in LML, but it can be used from Haskell as well. * Calling (side effect free) C functions from Haskell/LML is possible. * Comes with three different garbage collectors, which may be choosen at run time. Contact: Lennart Augustsson Department of Computer Sciences Chalmers University of Technology S-412 96 Goteborg SWEDEN [EMAIL PROTECTED] The hbc distribution is available from the standard archive sites, in pub/haskell/chalmers. The Yale compiler ~~~~~~~~~~~~~~~~~ The Yale Haskell compiler (Y2.0) has the following attributes: * A compiler from Haskell to Lisp, built on top of Common Lisp. An interactive, integrated Haskell programming environment. Supports both large scale Haskell programming and educational use. * Written in Lisp; ports to any machine supporting Lucid, CMU, or akcl lisps. (A pre-built distribution for SPARC machines is available.) * Generates Lisp as its target code -- hence highly portable. * Interactive programming environment based on the Emacs editor. Comes with an online Haskell tutorial. * Easy to call out to Lisp (or C, depending on the Lisp being used) functions. * High quality code. The ultimate code quality will depend on the underlying Lisp system but the Yale compiler will generate declarations which will allow the more sophisticated Lisp systems to produce the best possible code. The next release (available March 93) is expected to include: * Ports to all major Lisp systems * Faster compilation * New monad-based model for input/output, which allows calls to non-Haskell procedures without losing referential transparency * Compiler passes and data structures will be accessable from Haskell, allowing new or different phases written in Haskell to be inserted. * Strict data constructors * Interfaces tuned to the Mac and PC * More support for separate compilation and large scale Haskell programs. * Compiler pragmas to create specialized versions of overloaded operators. * Language extensions to support efficient manipulation of state. The beta release is available in two forms: full sources which build on Lucid, akcl, and CMU common lisp and a binary version for the Sparc system built on CMU lisp. These are available the haskell/yale directory of the ftp sites. Contact: John Peterson Yale University Department of Computer Science New Haven, CT 06520 UNITED STATES [EMAIL PROTECTED] The Gofer interpreter ~~~~~~~~~~~~~~~~~~~~~ The Gofer interpreter implements a subset of Haskell, and uses an experimental variant of Haskell's innovative `type classes' for overloading. It extends Haskell in some ways, and subsets it in others. The most significant features of Haskell not currently supported are: modules, arrays, overloaded numeric constants, default declarations, derived instances and contexts in datatype definitions. The Gofer interpreter is written in C. It runs on Sun3's, Sun4's, and IBM PC's, Macs (see note below), Atari ST, Commodore Amiga, Acorn Archimedes and others. Version 2.28 of Gofer has just been released (February 1993). New features added with this release include: * Support for constructor classes and overloaded monad comprehensions. * A naive `compiler' translating Gofer programs to C. * A number of small enhancements and bug-fixes. Contact: Mark P. Jones Yale University Department of Computer Science New Haven, CT 06520 UNITED STATES [EMAIL PROTECTED] The Gofer distribution is available from the standard archive sites (see above), in pub/haskell/gofer. MacGofer, a Gofer system with a full-blown Macintosh look-and-feel, done (mostly?) by Kevin Hammond at Glasgow, is available in a "macgofer" subdirectory.