The Hugs 98 User Manual
top | back | next

## 2`` A technical summary of Hugs 98

Hugs 98 provides an almost complete implementation of Haskell 98 [Haskell98], including:

- Lazy evaluation, higher order functions, and pattern matching.
- A wide range of built-in types, from characters to bignums, and lists to functions, with comprehensive facilities for defining new datatypes and type synonyms.
- An advanced polymorphic type system with type and constructor class overloading.
- All of the features of the Haskell 98 expression and pattern syntax including lambda, case, conditional and let expressions, list comprehensions, do-notation, operator sections, and wildcard, irrefutable and `as' patterns.
- An implementation of the main Haskell 98 primitives for monadic I/O, with support for simple interactive programs, access to text files, handle-based I/O, and exception handling.
- An almost complete implementation of the Haskell module system. The primary omission is that mutually recursive modules are not yet supported.

Hugs 98 also supports a number of advanced and experimental extensions including multi-parameter classes, extensible records, rank-2 polymorphism, existentials, scoped type variables, and restricted type synonyms. By default, these features can only be used if Hugs is started with the `-98` command line flag. (See Section 7 for details.)

Hugs is implemented as an interpreter that provides:

- A relatively small, portable system that can be used on a range of different machines, from home computers, to Unix workstations.
- A read-eval-print loop for displaying the value of each expression that is entered into the interpreter.
- Fast loading, type checking, and compilation of Haskell programs, with facilities for automatic loading of imported modules.
- Integration with an external editor, chosen by the user, to allow for rapid development, and for location of errors.
- Modest browsing facilities that can be used to find information about the operations and types that are available.

Hugs is a successor to Gofer --- an experimental functional programming system that was first released in September 1991 --- and users of Gofer will see much that is familiar in Hugs. However, Hugs offers much greater compatibility with the Haskell standard; indeed, the name Hugs was originally chosen as a mnemonic for the "Haskell users' Gofer system."

There have been many modifications and enhancements to Hugs since its first release on Valentines day, February 14, in 1995. Some of the most obvious improvements include:

- Full support for new Haskell 98 features, including the labelled field syntax, do-notation, newtype, strictness annotations in datatypes, the `Eval` class, ISO character set, etc.
- Support for Haskell modules, and a growing collection of library modules, that includes facilities for Win32 programming.
- User interface enhancements, particularly the import chasing and search path features, which were motivated by a greater emphasis on the role of libraries in Haskell 1.3 and later versions of the language.
- Small improvements in runtime performance, and more reliable space usage, thanks to the use of non-conservative garbage collection during program execution.
- A graphical user interface for the Hugs systems that runs on the Windows operating system.

There have also been a number of other enhancements, and fixes for bugs in previous releases.

The Hugs 98 User Manual
top | back | next
May 22, 1999