The purpose of this text is to introduce functional programming ideas using the
Haskell language. It covers the important aspects of the language, but does not
aim to be complete. Among the topics omitted are data types with labelled fields, which resemble
records or structures in other languages; strictness annotations,
which are used to make data type constructors strict in some or all of their arguments;
details of the Read
class and the numeric types and classes.
Further information about all these can be found in the Haskell language report and the `Gentle Introduction' also contains useful information about some of them, as well as providing an overview of the language for an experienced functional programmer. Both of these, as well as many other Haskell resources, can be found at the Haskell home page, http://www.haskell.org/.
The text has discussed many of the most important functions in the
standard prelude, but on the whole has avoided discussing the contents
of the libraries, which are documented in the Haskell libraries. These
libraries fall into two classes. First there are libraries of
utilities, such as List.hs
which contains a multitude of
list-manipulating functions. These are in libraries, which can be
included or not by the programmer at will, so as not to clutter up the name space of the
language.
Other libraries contain extensions of the language, including
a library of arrays, Array.hs
, as well as facilities for file creation and
management, Directory.hs
, and for system links,
System.hs
. These libraries come with all Haskell
implementations; each implementation will also come with particular
extensions, usually available in the form of library modules.
Haskell was first defined in 1987, and has been modified and extended since then. This text is written in Haskell 98, which is meant to provide a stable base system consisting of tried and tested features. The progress of research in functional programming makes it clear that a language like Haskell will not stand still forever, and there is at the time of writing an initiative underway to design Haskell 2, which will extend and modify the language in a number of significant ways. Nevertheless, it is likely that systems will continue to support the features of Haskell 98 as outlined in this text. The Haskell home page can be relied upon to contain up-to-date information on the status of Haskell.
As it has been introduced in this text, Haskell is a general-purpose, high-level programming language. Many real-world applications require programs to, for instance, manipulate computer graphics, modify the state of a machine, or operate in parallel, and Haskell as it stands does not provide these facilities directly.
However, there have been extensions to particular Haskell implementations to perform tasks like this. Information about a great number of applications and extensions of Haskell can be found on the home page http://www.haskell.org/libraries.html or in the documentation for particular implementations, as detailed on the Haskell home page.
Often languages are not used in isolation, and so links to external libraries and programming languages are important. Also, a variety of graphical user interfaces for Haskell programmes have been written; details of both of these can be found on the libraries page.
Other specific extensions include
There are now many resources on Haskell and functional programming to be found on the World Wide Web. This text itself has a home page at http://www.cs.kent.ac.uk/people/staff/sjt/craft2e/ which lists all the links given here.
The Haskell home page is at http://www.haskell.org/ and information about the Haskell mailing list can also be found there.
For functional programming in general, the first place to start is the `FAQ', http://www.cs.nott.ac.uk/Department/Staff/gmh/faq.html which gives details of all functional programming languages, as well as more general information and indeed answers to frequently asked questions about the basics of functional programming.
The material in this text is an introduction to modern functional programming in a typed, lazy, language. As the field develops, new techniques and approaches are continually being developed; a good place to start in learning about these are the proceedings of two summer schools in Advanced Functional Programming. see the ways in which functional langauges are being used in education, the proceedings of a meeting on Functional Languages in Education and these have been followed up with the creation of the FPLE Web site mentioned above.
Research in functional programming is reported in the Journal of Functional Programming http://www.dcs.gla.ac.uk/jfp/ and at the annual International Conference in Functional Programming, as well as at other meetings detailed at the Web sites mentioned above.
© Simon Thompson, 1999.
Created 7 January 1999.