Libraries and Tools For Haskell

Besides the standard libraries defined in the Library Report many other libraries have been developed.
Libraries shared by Hugs and GHC
The interpreter Hugs and the compiler GHC have several libaries in common.
Edison
Chris Okasaki is currently developing a library of efficient data structures.
CGI Library
CGI programs can receive input from the client's web browser, encoded in a complicated fashion, and can write output in a variety of formats (plain text, HTML, JPEG etc) which the client then sees. The decoding and encoding of the IO is often expressed in PERL or C, and makes CGI applications tedious and awkward to write. Haskell/CGI is a library for writing CGI programs in Haskell 1.3 and above.
Pretty printer library
Simon Peyton Jones made an "industrial strength" pretty printing library in Haskell, based on John Hughes's paper "The Design of a Pretty-printing Library" (in Advanced Functional Programming, Johan Jeuring and Erik Meijer (eds), LNCS 925). Original version by John Hughes.
Pretty-printing combinators
The combinators in the library are optimal in the sense that they produce the layout with the smallest height possible. They also allow the programmer to specify several different layouts.
Parsing combinators
The combinators in this library are deterministic, fast and capable of correcting errors. This is possible because of the LL(1) restriction on the grammar.
Regular expression library
Inspired by the Perl regular expression library, written purely in Haskell. Also part of the GHC distribution.
The Haskore Computer Music System
Haskore is a collection of Haskell modules designed for expressing musical structures in the high-level, declarative style of functional programming. Haskore is a means for describing music - in particular Western Music - rather than sound. It is not a vehicle for synthesizing sound produced by musical instruments, for example, although it does capture the way certain (real or imagined) instruments permit control of dynamics and articulation. Haskore compositions can be translated into various executable formats like MIDI and printed in traditional notation.
Hawk, Specifying and Prototyping Microprocessors
The goal of the Hawk project is to develop a language for expressing highly abstracted specifications of modern microprocessor designs, to provide design teams with the ability to dynamically explore a wide range of design choices. The Hawk language is Haskell plus the Hawk library.
Functional Reactive Animation
FRAN is a Haskell library (or "embedded language") for interactive animations with 2D and 3D graphics and sound. It runs on Hugs under Windows 95 and Windows NT, using Win32 graphics (GDI).
HaSQL
HaSQL is a Haskell to ODBC interface. HaSQL allows Haskell program to run SQL queries against an ODBC compliant database. Queries with parameters are supported. Data is retrieved from the database as a lazy list.
Haskell Library
Libraries by Ralf Hinze for data structures, sorting, searching, parsing, pretty printing, numerical algorithms, monads, etc.
Functional Specification of the JPEG algorithm, and an Implementation for Free
JPEG encoding Written in Gofer.

Graphical User Interface Libraries

Fudgets
Fudgets is primarily a Graphical User Interface Toolkit for the functional programming language Haskell and the X Windows system. Fudgets also makes it easy to create client/server applications that communicate via the Internet.
Haggis
Haggis is a graphical user interface framework for the functional language Haskell, running under the X Window system. It is being developed using the Glasgow Haskell Compiler with its concurrent extensions to achieve more comfortable interaction with the outside world.

Comment of Sigbjorn Finne on August 9, 1998:

Modulo a couple of Makefile tweaks, Haggis is just about ready to be added to the Glasgow fptools CVS repository, which is publically accessible for people that want to have a look/contribute. This version should compile with the latest&greatest version of GHC.

Re: "official" GUI system of the project that includes combining Hugs and GHC together - this is still up in the air, we're looking at a bunch of different ways of doing this. Related to Haggis, one option is to use the basic Haggis programming model (i.e., Concurrent Haskell + virtual I/O devices) and layer it on top of a Tk binding (on top of TkHaskell, probably) or some other set of widgets/controls. Adopting Haggis in its full glory(?) won't happen, it would just be too much work to get something slick, maintainable and portable across platforms by doing it all ourselves in Haskell.

TkHaskell
TkHaskell is a library of functions for writing graphical user interfaces in Haskell. The library provides a convenient, abstract and high-level way to write window-oriented applications. The implementation rests on modern concepts like monads and constructor classes. The library communicates with the graphical toolkit Tcl/Tk.
Haskell-Tk
is a concurrent, strongly typed and higher order encapsulation of Tk that supports the definition of user dialogues. Einar Karlsson developed it for his UniForm WorkBench.
Pidgets
developed by Enno Scholz unifies pictures and widgets in a constraint-based framework for concurrent functional GUI programming.
Budgets
A library of Fudget-like combinators based on the Openlook widget library was developed by Alastair Reid and Satnam Singh.
Embracing Windows
is a framework for developing graphical user interfaces. It runs under Windows 95 using a modified version of Hugs 1.3.
Gadgets
Lazy functional components for graphical user interfaces, developed by Rob Noble under the supervision of Colin Runciman (LNCS 982, pages 321-340).
...
Meurig Sage is working on a sort of combination of Haggis, Fran, and Clock.

Interfacing with other Languages

Green Card
Green Card is a foreign function interface preprocessor for Haskell, simplifying the task of interfacing Haskell programs to external libraries (which are normally exposed via C interfaces). Green Card is currently able to generate code compatible with the Glasgow Haskell Compiler, Hugs and nhc13.
H/Direct
H/Direct is a OSF DCE IDL compiler for Haskell, which helps interfacing Haskell code to libraries or components written in other languages. An Interface Definition Language (IDL) specification specifies the type signatures and types expected by a set of external functions. One important use of this language neutral specification of interfaces is to specify COM (Microsoft's Component Object Model) interfaces, and H/Direct offers special support for both using COM objects from Haskell and creating Haskell COM objects. H/Direct is the successor of Green Card. A possible future extension is a H/Direct front end implementing the OMG IIOP CORBA variant of IDL.

ActiveHaskell
ActiveHaskell is the collective name for all Haskell components, both tools and libararies, that allow interaction with the COM/ActiveX framework:

Scanner and Parser Generators

Happy
Happy is a parser generator system for Haskell, similar to the tool `yacc' for C. Like `yacc', it takes a file containing an annotated BNF specification of a grammar and produces a Haskell module containing a parser for the grammar.
Lucky
A parser generator for Haskell using monadic parser combinators. It was developed to be compatible with Happy.
Alex: A Lexical Analyser Generator
This is a preliminary release of Alex, a Lex-like package for generating Haskell scanners. The source code is intended for a Haskell 1.4 compiler.

Various

The Habitat browser
Habitat is a source code browser for use with Haskell, in particular, with code for the hbc compiler. The browser allows a user to skip between modules of a large program quickly and easily. It displays Haskell code coloured according to its syntax, with embedded anchors.
HaskellDoc
This program generates an HTML document showing the module interfaces of a Haskell project. Convenient links are placed for easy browsing of the different modules of the project, and for quick access to the source code.
Uniform Workbench
This tool is an Integration Framework providing its services in the lazy functional programming language Haskell. The WorkBench provides support for data, control and presentation integration, so that integrated Software Development Environments can be constructed from the basis of prefabricated, off-the-shelf components. We are currently using the WorkBench to construct integrated environments for Haskell program development and for specification and proof of Z specifications.
An Equational Reasoning Assistant
A tool to do machine assisted equational reasoning using Haskell as concrete meta-language for expressing the things that shall be reasoned about.
D????e
D????e allows derivation of instances for classes that aren't supported by the standard compilers. In addition, instances can be produced in seperate modules to that containing the type declaration. This allows instances to be derived for a type after the original module has been compiled. As a bonus, simple utility functions can also be produced from a type.

(X)Emacs modes for Haskell

There exists a number of modes for the editors Emacs and XEmacs. They support highlighting different syntactic constructs through the use of colours and fonts, more or less automatic indentation and cooperation with various Haskell systems. Because of the rather complex syntax of Haskell and the offside rule automatic indentation cannot be perfect and is hence a doubtful feature in my opinion.
Will Partain's collection (from December 1995)
About 8 different modes.
Haskell mode for Emacs
A set of really useful tools for dealing with Haskell source code in Emacs.
Hugs Mode by Chris Van Humbeeck
Provides fontification and cooperation with Hugs.
HaskellDoc
by Hans Loidl. An Emacs minor mode that can be combined with another haskell mode. It allows you to look-up the type of the Haskell function under the cursor by doing nothing for at least 0.5 seconds.
Hugs Mode by Olaf Chitil
It provides fontification, an inferior shell running Hugs and cooperation between XEmacs and Hugs. Based on various modes from Will Partain's collection. Unfortunately fontifcation is still only for Haskell 1.2 and full support only for Hugs 1.01...

haskell.org | intro | report | papers | teaching | compilers | libraries | projects | future haskell | mailing list | links | :-)
Last update: September 21st, 1998