Typing Haskell in Haskell

REVISED VERSION

Last updated: Thanksgiving day, November 23, 2000

Abstract

Haskell benefits from a sophisticated type system, but implementors, programmers, and researchers suffer because it has no formal description. To remedy this shortcoming, we present a Haskell program that implements a Haskell typechecker, thus providing a mathematically rigorous specification in a notation that is familiar to Haskell users. We expect this program to fill a serious gap in current descriptions of Haskell, both as a starting point for discussions about existing features of the type system, and as a platform from which to explore new proposals.

Resources

The current version of the paper is available here in gzipped Postscript (US letter size), gzipped Postscript (A4 size), PDF (portable document format), and HTML formats.

The source code for the type checker is derived from exactly the same source as the code shown in the paper, but it also contains quite a lot of extra code for testing and printing. So, as long as I do my job properly, you can be sure that (a) what you see in the paper actually works, and that (b) the code and the paper are consistent with each other! The source code is available in two different formats:

Several people have asked me if I have a version of Typing Haskell in Haskell that works with multiple parameter classes. In fact, I have a couple. Here's the one that is closest to the Novmber 23, 2000 release as a gzipped tar file: thih-multiparam.tar.gz.

Revision History

November 23, 2000: Thanksgiving day!
A fairly substantial overhaul of some sections of the November 1 version, that was inspired by some great feedback and suggestions from Johan Nordlander and Tom Pledger. Thanks guys! This version has now been submitted to be considered for journal publication ...
November 1, 2000
This is the first release of a new version of the paper and software. The previous version, as presented at the Haskell workshop in October 1999, can be obtained by clicking here.

Feedback

Comments, suggestions, and bug reports are all welcome; please contact me at mpj@cse.ogi.edu.