Copyright (c) Hal Daume III, 2002-2006. The preprint version of this tutorial is intended to be free to the entire Haskell community, so we grant permission to copy and distribute it for any purpose, provided that it is reproduced in its entirety, in- cluding this notice. Modi\ufb01ed versions may not be distributed without prior concent of the author, and must still maintain a copy of this notice. The author retains the right to change or modify this copyright at any time, as well as to make the book no longer free of charge.
The goal of theYet Another Haskell Tutorial is to provide a complete intoduction to the Haskell programming language. It assumes no knowledge of the Haskell language or familiarity with functional programming in general. However, general familiarity with programming concepts (such as algorithms) will be helpful. This is not intended to be an introduction to programming in general; rather, to programming in Haskell. Suf\ufb01cient familiarity with your operating system and a text editor is also necessary (this report only discusses installation on con\ufb01guration on Windows and *Nix system; other operating systems may be supported \u2013 consult the documentation of your chosen compiler for more information on installing on other platforms).
Haskell is called a lazy, pure functional programming language. It is calledlazy be- cause expressions which are not needed to determine the answer to a problem are not evaluated. The opposize of lazy isstrict, which is the evaluation strategry of most common programming languages (C, C++, Java, even ML). A strict language is one in which every expression is evaluated, whether the result of its computation is important or not. (This is probably not entirely true as optimizing compilers for strict languages often do what\u2019s called \u201cdead code elmination\u201d \u2013 this removes unused expressions from the program.) It is calledpure because it does not allow side effects (A side effect is something that affects the \u201cstate\u201d of the world. For instance, a function that prints something to the screen is said to be side-effecting, as is a function which affects the value of a global variable.) \u2013 of course, a programming language without side effects would be horribly useless; Haskell uses a system ofmonads to isolate all impure com- putations from the rest of the program and perform them in the safe way (see Chapter 9 for a discussion of monads proper or Chapter 5 for how to do input/output in a pure language).
Haskell is called afunctional language because the evaluation of a program is equivalent to evaluating a function in the pure mathematical sense. This also differs from standard languages (like C and Java) which evaluate a sequence of statements, one after the other (this is termed animperative langauge).
In September of 1987 a meeting was held at the conference on Functional Programming Languages and Computer Architecture (FPCA \u201987) in Port- land, Oregon, to discuss an unfortunate situation in the functional pro- gramming community: there had come into being more than a dozen non- strict, purely functional programming languages, all similar in expressive power and semantic underpinnings. There was a strong consensus at this meeting that more widespread use of this class of functional languages was being hampered by the lack of a common language. It was decided that a committee should be formed to design such a language, providing faster communication of new ideas, a stable foundation for real applications de- velopment, and a vehicle through which others would be encouraged to use functional languages. This document describes the result of that com- mittee\u2019s efforts: a purely functional programming language called Haskell, named after the logician Haskell B. Curry whose work provides the logical basis for much of ours.
The committee intended that Haskell would serve as a basis for future research in language design, and hoped that extensions or variants of the language would appear, incorporating experimental features.
Haskell has indeed evolved continuously since its original publication. By the middle of 1997, there had been four iterations of the language design (the latest at that point being Haskell 1.4). At the 1997 Haskell Workshop in Amsterdam, it was decided that a stable variant of Haskell was needed; this stable language is the subject of this Report, and is called \u201cHaskell 98\u201d.
This action might not be possible to undo. Are you sure you want to continue?