Difference between revisions of "Books"

From HaskellWiki
Jump to navigation Jump to search
 
Line 5: Line 5:
   
 
<DL>
 
<DL>
<DT>Simon Peyton Jones: <A HREF="http://titles.cambridge.org/catalogue.asp?isbn=0521826144">
+
<DT>Simon Peyton Jones: [http://titles.cambridge.org/catalogue.asp?isbn=0521826144
<EM>Haskell 98 Language and Libraries</EM></A>,
+
<EM>Haskell 98 Language and Libraries</EM>], Cambridge University Press, 2003, Hardback, 272 pages, ISBN: 0521826144, £35.00
Cambridge University Press, 2003, Hardback, 272 pages, ISBN: 0521826144, £35.00
 
 
<BR>
 
<BR>
 
<BLOCKQUOTE>
 
<BLOCKQUOTE>
Line 23: Line 22:
 
research, teaching, or application of Haskell.
 
research, teaching, or application of Haskell.
 
</BLOCKQUOTE>
 
</BLOCKQUOTE>
 
 
</DT></DL>
 
</DT></DL>
   
Line 29: Line 27:
   
 
<DL>
 
<DL>
 
<DT>Paul Hudak: [http://www.haskell.org/soe <EM>The
 
<DT>Paul Hudak: <A HREF="http://www.haskell.org/soe"> <EM>The
 
 
Haskell School of Expression: Learning Functional Programming through
 
Haskell School of Expression: Learning Functional Programming through
Multimedia</EM></A>, Cambridge University Press, New York, 2000, 416
+
Multimedia</EM>], Cambridge University Press, New York, 2000, 416
 
pp, 15 line diagrams, 75 exercises, Paperback $29.95, ISBN:
 
pp, 15 line diagrams, 75 exercises, Paperback $29.95, ISBN:
 
0521644089, Hardback $74.95, ISBN: 0521643384
 
0521644089, Hardback $74.95, ISBN: 0521643384
Line 51: Line 48:
 
of domain specific languages, using three examples: FAL (a Functional
 
of domain specific languages, using three examples: FAL (a Functional
 
Animation Language), IRL (an Imperative Robot Language), and MDL (a
 
Animation Language), IRL (an Imperative Robot Language), and MDL (a
Music Description Language).  Details about programming in Haskell
+
Music Description Language). Details about programming in Haskell
 
are presented in boxes throughout the text so they can be easily
 
are presented in boxes throughout the text so they can be easily
 
referred to and found quickly.
 
referred to and found quickly.
Line 61: Line 58:
 
</BLOCKQUOTE>
 
</BLOCKQUOTE>
   
 
<DT>Simon Thompson: [http://www.cs.ukc.ac.uk/people/staff/sjt/craft2e/ <EM>Haskell: The Craft of Functional Programming</EM>], Second Edition,
<DT>Simon Thompson: <A
 
HREF="http://www.cs.ukc.ac.uk/people/staff/sjt/craft2e/"><EM>Haskell:
 
The Craft of Functional Programming</EM></A>, Second Edition,
 
 
Addison-Wesley, 507&nbsp;pages, paperback, 1999. ISBN
 
Addison-Wesley, 507&nbsp;pages, paperback, 1999. ISBN
 
0-201-34275-8.<BR>
 
0-201-34275-8.<BR>
Line 71: Line 66:
 
<P>
 
<P>
 
Building on the strengths of the first edition, the book includes many new and improved features:
 
Building on the strengths of the first edition, the book includes many new and improved features:
 
*Complete coverage of Haskell 98, the standard version of Haskell which will be stable and supported by implementations for years to come.
<UL>
 
 
*An emphasis on software engineering principles, encouraging a disciplined approach to building reusable libraries of software components.
<LI>Complete coverage of Haskell 98, the standard version of Haskell which will be stable and supported by implementations for years to come.
 
 
*Detailed coverage of the Hugs interpreter with an appendix covering other implementations.
 
 
*A running case study of pictures emphasizes the built-in functions which appear in the standard prelude and libraries. It is also used to give an early preview of some of the more complex language features, such as high-order functions.
<LI>An emphasis on software engineering principles, encouraging a disciplined approach to building reusable libraries of software components.
 
 
*List comprehensions and the standard functions over lists are covered before recursion.
 
 
*Early coverage of polymorphism supporting the "toolkit" approach and encouraging the resuse of built-in functions and types.
<LI>Detailed coverage of the Hugs interpreter with an appendix covering other implementations.
 
 
*Extensive reference material containing details of further reading in books, journals and on the World Wide Web.
 
 
*Accompanying Web Site supporting the book, containing all the program code, further teaching materials and other useful resources.
<LI>A running case study of pictures emphasizes the built-in functions which appear in the standard prelude and libraries. It is also used to give an early preview of some of the more complex language features, such as high-order functions.
 
 
<LI>List comprehensions and the standard functions over lists are covered before recursion.
 
 
<LI>Early coverage of polymorphism supporting the "toolkit" approach and encouraging the resuse of built-in functions and types.
 
 
<LI>Extensive reference material containing details of further reading in books, journals and on the World Wide Web.
 
 
<LI>Accompanying Web Site supporting the book, containing all the program code, further teaching materials and other useful resources.
 
</UL>
 
 
<B>Synopsis</B><BR>
 
<B>Synopsis</B><BR>
 
This books introduces Haskell at a level appropriate for those with little or no prior experience of functional programming. The emphasis is on the process of crafting programs, solving problems, and avoiding common errors.
 
This books introduces Haskell at a level appropriate for those with little or no prior experience of functional programming. The emphasis is on the process of crafting programs, solving problems, and avoiding common errors.
 
</BLOCKQUOTE>
 
</BLOCKQUOTE>
   
<DT>Richard Bird: <A HREF="http://www.prenhall.com/allbooks/ptr_0134843460.html"><EM>Introduction to Functional Programming using Haskell</EM></A>, 2nd edition, Prentice Hall Press, 1998, 460 pp., ISBN: 0-13-484346-0.<BR>
+
<DT>Richard Bird: [http://www.prenhall.com/allbooks/ptr_0134843460.html <EM>Introduction to Functional Programming using Haskell</EM>], 2nd edition, Prentice Hall Press, 1998, 460 pp., ISBN: 0-13-484346-0.<BR>
 
From the cover:
 
From the cover:
 
<BLOCKQUOTE>
 
<BLOCKQUOTE>
Line 104: Line 90:
 
</BLOCKQUOTE>
 
</BLOCKQUOTE>
   
<DT>Antony Davie: <A HREF="http://www.cup.org/Titles/25/0521258308.html"><EM>An Introduction to Functional Programming Systems Using Haskell</EM></A>, Cambridge University Press, 1992. ISBN 0-521-25830-8 (hardback). ISBN 0-521-27724-8 (paperback).<BR>
+
<DT>Antony Davie: [http://www.cup.org/Titles/25/0521258308.html <EM>An Introduction to Functional Programming Systems Using Haskell</EM>], Cambridge University Press, 1992. ISBN 0-521-25830-8 (hardback). ISBN 0-521-27724-8 (paperback).<BR>
 
Cover:
 
Cover:
 
<BLOCKQUOTE>
 
<BLOCKQUOTE>
Line 110: Line 96:
 
Applicative programs have the advantage of being almost immediately expressible as functional descriptions; they can
 
Applicative programs have the advantage of being almost immediately expressible as functional descriptions; they can
 
be proved correct and transformed through the referential transparency property.
 
be proved correct and transformed through the referential transparency property.
  +
<P>
 
 
This book presents the basic concepts of functional programming, using the language Haskell for examples. The author
 
This book presents the basic concepts of functional programming, using the language Haskell for examples. The author
 
incorporates a discussion of lambda calculus and its relationship with Haskell, exploring the implications for
 
incorporates a discussion of lambda calculus and its relationship with Haskell, exploring the implications for
 
parallelism. Contents: SASL for Beginners / Examples of SASL Programming / More Advanced Applicative Programming
parallelism.
 
<P>
 
Contents: SASL for Beginners / Examples of SASL Programming / More Advanced Applicative Programming
 
 
Techniques / Lambda Calculus / The Relationship Between Lambda Calculus and SASL / Program Transformation and
 
Techniques / Lambda Calculus / The Relationship Between Lambda Calculus and SASL / Program Transformation and
 
Efficiency / Correctness, Equivalence and Program Verification / Landin's SECD Machine and Related
 
Efficiency / Correctness, Equivalence and Program Verification / Landin's SECD Machine and Related
Line 122: Line 106:
 
Languages
 
Languages
 
</BLOCKQUOTE>
 
</BLOCKQUOTE>
<DT>Fethi Rabhi and Guy Lapalme: <A
+
<DT>Fethi Rabhi and Guy Lapalme: [http://www.iro.umontreal.ca/~lapalme/Algorithms-functional.html <EM> Algorithms: A functional programming approach</EM>],
HREF="http://www.iro.umontreal.ca/~lapalme/Algorithms-functional.html"><EM>
 
Algorithms: A functional programming approach
 
</EM></A>,
 
 
Addison-Wesley, 235&nbsp;pages, paperback, 1999. ISBN
 
Addison-Wesley, 235&nbsp;pages, paperback, 1999. ISBN
 
0-201-59604-0<BR>
 
0-201-59604-0<BR>
Line 137: Line 118:
 
alternative solutions. <br>
 
alternative solutions. <br>
 
<b>Key features:</b>
 
<b>Key features:</b>
 
*Most chapters are self-contained and can be taught independently from each other.
<ul>
 
 
*All programs are in Haskell'98 and provided on a WWW site.
<li>Most chapters are self-contained and can be taught independently from
 
 
*End of chapter exercises throughout.
each other.
 
 
*Comprehensive index and bibliographical notes.
<li>All programs are in Haskell'98 and provided on a WWW site.
 
<li>End of chapter exercises throughout.
 
<li>Comprehensive index and bibliographical notes.
 
</ul>
 
 
<B>Synopsis</B><BR>
 
<B>Synopsis</B><BR>
 
The book is organised as a classic algorithms book according to topics
 
The book is organised as a classic algorithms book according to topics
Line 155: Line 133:
 
The book is intended for computer science students taking algorithms
 
The book is intended for computer science students taking algorithms
 
and/or (basic or advanced) functional programming courses.
 
and/or (basic or advanced) functional programming courses.
 
 
</BLOCKQUOTE>
 
</BLOCKQUOTE>
   
<dt>Jeremy Gibbons and Oege de Moor (eds.): <a href="http://www.palgrave.com/catalogue/catalogue.asp?Title_Id=0333992857"><em>The Fun of Programming</em></a>,
+
<dt>Jeremy Gibbons and Oege de Moor (eds.): [//www.palgrave.com/catalogue/catalogue.asp?Title_Id=0333992857 <em>The Fun of Programming</em>],Palgrave, 2002, 288 pages. ISBN 0333992857.
Palgrave, 2002, 288 pages. ISBN 0333992857.
 
 
<blockquote>
 
<blockquote>
 
<b>Book description:</b><br>
 
<b>Book description:</b><br>
Line 168: Line 144:
 
</blockquote>
 
</blockquote>
   
<dt> Cordelia Hall and John O'Donnell: <a href="http://www.dcs.gla.ac.uk/~jtod/discrete-mathematics/"><em>Discrete Mathematics Using a Computer</em></a>,
+
<dt> Cordelia Hall and John O'Donnell: [http://www.dcs.gla.ac.uk/~jtod/discrete-mathematics/ <em>Discrete Mathematics Using a Computer</em>],
 
Springer, 2000, 360 pages. ISBN 1-85233-089-9.
 
Springer, 2000, 360 pages. ISBN 1-85233-089-9.
 
<blockquote>
 
<blockquote>
Line 177: Line 153:
 
abstract mathematics. The programs are also useful for practical calculations, and they
 
abstract mathematics. The programs are also useful for practical calculations, and they
 
can serve as a foundation for larger software packages.
 
can serve as a foundation for larger software packages.
  +
<p>
 
 
Designed for first and second year undergraduate students, the book is also ideally suited
 
Designed for first and second year undergraduate students, the book is also ideally suited
 
to self-study. No prior knowledge of functional programming is required; the book and
 
to self-study. No prior knowledge of functional programming is required; the book and
Line 183: Line 159:
 
</blockquote>
 
</blockquote>
   
<dt>Kees Doets and Jan van Eijck: <A HREF="http://www.cwi.nl/~jve/HR"><em>The Haskell Road to Logic, Maths and Programming</em></a>. King's College Publications, London, 2004. ISBN 0-9543006-9-6 (14.00 pounds, $25.00).
+
<dt>Kees Doets and Jan van Eijck: [http://www.cwi.nl/~jve/HR <em>The Haskell Road to Logic, Maths and Programming</em>]. King's College Publications, London, 2004. ISBN 0-9543006-9-6 (14.00 pounds, $25.00).
 
<blockquote>
 
<blockquote>
 
<b>Book description:</b><br>
 
<b>Book description:</b><br>
Line 196: Line 172:
 
remain very close to the concepts that get implemented, while the
 
remain very close to the concepts that get implemented, while the
 
laziness permits smooth handling of infinite data structures.
 
laziness permits smooth handling of infinite data structures.
  +
<P>
 
 
We do not assume that our readers have previous experience with either
 
We do not assume that our readers have previous experience with either
 
programming or construction of formal proofs. We do assume previous
 
programming or construction of formal proofs. We do assume previous
Line 206: Line 182:
 
install it, and that they know how to use an editor for constructing
 
install it, and that they know how to use an editor for constructing
 
program texts.
 
program texts.
  +
<P>
 
 
After having worked through the material in the book, i.e., after
 
After having worked through the material in the book, i.e., after
 
having digested the text and having carried out a substantial number
 
having digested the text and having carried out a substantial number
Line 214: Line 190:
 
proofs in a structured way, and how to read and digest mathematical
 
proofs in a structured way, and how to read and digest mathematical
 
proofs written by others.
 
proofs written by others.
  +
<P>
 
 
The book can be used as a course textbook, but since it comes with
 
The book can be used as a course textbook, but since it comes with
 
solutions to all exercises (electronically available from the authors
 
solutions to all exercises (electronically available from the authors
Line 220: Line 196:
 
code of all programs discussed in the text, a list of errata,
 
code of all programs discussed in the text, a list of errata,
 
further relevant material and an email link to the authors
 
further relevant material and an email link to the authors
can be found <A HREF="http://www.cwi.nl/~jve/HR">here</A>.
+
can be found [http://www.cwi.nl/~jve/HR here].
 
</blockquote>
 
</blockquote>
   
Line 229: Line 205:
 
<blockquote>
 
<blockquote>
 
The book is out of print. The full sources and a postscript version are
 
The book is out of print. The full sources and a postscript version are
<a href="http://research.microsoft.com/Users/simonpj/Papers/papers.html">available for free</a>.
+
[http://research.microsoft.com/Users/simonpj/Papers/papers.html available for free].
 
</blockquote>
 
</blockquote>
 
</DL>
 
</DL>
Line 240: Line 216:
   
 
<UL>
 
<UL>
<LI><A HREF="../tutorial/"><EM>A
+
<LI>[../tutorial/ <EM>A
Gentle Introduction to Haskell</EM></A> by Paul Hudak, John Peterson, and Joseph H. Fasel.<BR>
+
Gentle Introduction to Haskell</EM>] by Paul Hudak, John Peterson, and Joseph H. Fasel.<BR>
 
The title is a bit misleading. Some knowledge of another functional programming language is expected. The emphasis is on the type system and those features which are really new in Haskell (compared to other functional programming languages).
 
The title is a bit misleading. Some knowledge of another functional programming language is expected. The emphasis is on the type system and those features which are really new in Haskell (compared to other functional programming languages).
  +
<P>
 
<li><a href="http://www-106.ibm.com/developerworks/edu/os-dw-linuxhask-i.html">Beginning Haskell</a> from IBM developerWorks<br>
+
<li>[http://www-106.ibm.com/developerworks/edu/os-dw-linuxhask-i.html Beginning Haskell] from IBM developerWorks<br>
 
This tutorial targets programmers of imperative languages wanting to learn about functional programming in the language Haskell. If you have programmed in languages such as C, Pascal, Fortran, C++, Java, Cobol, Ada, Perl, TCL, REXX, JavaScript, Visual Basic, or many others, you have been using an imperative paradigm. This tutorial provides a gentle introduction to the paradigm of functional programming, with specific illustrations in the Haskell 98 language. (Free registration required.)
 
This tutorial targets programmers of imperative languages wanting to learn about functional programming in the language Haskell. If you have programmed in languages such as C, Pascal, Fortran, C++, Java, Cobol, Ada, Perl, TCL, REXX, JavaScript, Visual Basic, or many others, you have been using an imperative paradigm. This tutorial provides a gentle introduction to the paradigm of functional programming, with specific illustrations in the Haskell 98 language. (Free registration required.)
 
<p>
 
<p>
<li>Yet Another Haskell Tutorial by Hal Daume III et al. (<a href="http://www.isi.edu/~hdaume/htut/tutorial.ps">Postscript</a>, <a href="http://www.isi.edu/~hdaume/htut/tutorial.pdf">Pdf</a>)<br>
+
<li>Yet Another Haskell Tutorial by Hal Daume III et al. ([//www.isi.edu/~hdaume/htut/tutorial.ps Postscript], [//www.isi.edu/~hdaume/htut/tutorial.pdf Pdf])<br>
 
A tutorial for Haskell that is still under construction but covers already much ground.
 
A tutorial for Haskell that is still under construction but covers already much ground.
 
<p>
 
<p>
<LI><A HREF="http://www.numeric-quest.com/haskell/hcompanion/index.html">Haskell Companion</A> by Jan Skibinski<BR>
+
<LI>[http://www.numeric-quest.com/haskell/hcompanion/index.html Haskell Companion] by Jan Skibinski<BR>
 
A tutorial on most common concepts and definitions of functional language Haskell.
 
A tutorial on most common concepts and definitions of functional language Haskell.
  +
<P>
 
<LI><A HREF="http://www.informatik.uni-bonn.de/~ralf/teaching/Hskurs_toc.html">Online Haskell Course</A> by Ralf Hinze (in German).
+
<LI>[http://www.informatik.uni-bonn.de/~ralf/teaching/Hskurs_toc.html Online Haskell Course] by Ralf Hinze (in German).
  +
<P>
 
<LI><A HREF="functional-programming.dvi"><EM>Functional Programming</EM>
+
<LI>[functional-programming.dvi <EM>Functional Programming</EM>
by Jeroen Fokker, 1995.</A>(153 pages, 600 KB)<BR>
+
by Jeroen Fokker, 1995.](153 pages, 600 KB)<BR>
 
Textbook for learning functional programming with Gofer.
 
Textbook for learning functional programming with Gofer.
 
Here without Chapters&nbsp;6 and&nbsp;7.
 
Here without Chapters&nbsp;6 and&nbsp;7.
  +
<P>
 
<LI><A HREF="http://www.cs.ou.edu/cs1323h/textbook/haskell.shtml"><EM>Two Dozen Short Lessons in Haskell</EM> by Rex Page</A>.
+
<LI>[http://www.cs.ou.edu/cs1323h/textbook/haskell.shtml <EM>Two Dozen Short Lessons in Haskell</EM> by Rex Page].
 
A draft of a textbook on functional programming, available by ftp.
 
A draft of a textbook on functional programming, available by ftp.
 
It calls for active participation from readers by omitting
 
It calls for active participation from readers by omitting
Line 266: Line 242:
 
information based on knowledge they have already acquired. The missing information is then
 
information based on knowledge they have already acquired. The missing information is then
 
supplied on the reverse side of the page.
 
supplied on the reverse side of the page.
  +
<P>
 
<LI><A HREF="haskeller.dvi"><EM>The Little Haskeller</EM></A> by Cordelia Hall and John Hughes, 9. November 1993, 26 pages.<BR>
+
<LI>[haskeller.dvi <EM>The Little Haskeller</EM>] by Cordelia Hall and John Hughes, 9. November 1993, 26 pages.<BR>
 
An introduction using the Chalmers Haskell B interpreter (hbi).
 
An introduction using the Chalmers Haskell B interpreter (hbi).
 
Attention: it relies very much on the user interface of hbi which is quite
 
Attention: it relies very much on the user interface of hbi which is quite
 
different for other Haskell systems.
 
different for other Haskell systems.
  +
<P>
 
<LI><A HREF="http://www.di.uminho.pt/afp98/PAPERS/Tutorial.ps"><EM>Haskell Tutorial</EM></A>
+
<LI>[http://www.di.uminho.pt/afp98/PAPERS/Tutorial.ps <EM>Haskell Tutorial</EM>]
 
by José Barros and João Almeida.
 
by José Barros and João Almeida.
From a course given at the <A HREF="http://www.di.uminho.pt/afp98/preprogram/html">3rd International Summer School on Advanced Functional Programming</A>.
+
From a course given at the [http://www.di.uminho.pt/afp98/preprogram/html 3rd International Summer School on Advanced Functional Programming].
 
<p>
 
<p>
<li><a href="http://www.cs.mu.oz.au/~bjpop/papers/mira2hask.ps.gz"><em>Haskell for Miranda Programmers</em></a> by Kevin Glynn and Bernie Pope.
+
<li>[http://www.cs.mu.oz.au/~bjpop/papers/mira2hask.ps.gz <em>Haskell for Miranda Programmers</em>] by Kevin Glynn and Bernie Pope.
 
<p>
 
<p>
<li><a href="http://pleac.sourceforge.net/pleac_haskell/t1.html"><em>PLEAC-Haskell</em></a><br>
+
<li>[http://pleac.sourceforge.net/pleac_haskell/t1.html <em>PLEAC-Haskell</em>]<br>
 
Following the Perl Cookbook (by Tom Christiansen and Nathan Torkington, published by O'Reilly) spirit, the PLEAC Project aims to gather fans of programming, in order to implement the solutions in other programming languages.
 
Following the Perl Cookbook (by Tom Christiansen and Nathan Torkington, published by O'Reilly) spirit, the PLEAC Project aims to gather fans of programming, in order to implement the solutions in other programming languages.
 
<p>
 
<p>
<li><a href="ftp://ftp.geoinfo.tuwien.ac.at/navratil/HaskellTutorial.pdf"><em>Haskell-Tutorial</em></a> by Damir Medak and Gerhard Navratil<br>
+
<li>[ftp://ftp.geoinfo.tuwien.ac.at/navratil/HaskellTutorial.pdf <em>Haskell-Tutorial</em>] by Damir Medak and Gerhard Navratil<br>
 
The fundamentals of functional languages for beginners.
 
The fundamentals of functional languages for beginners.
<LI><A HREF="http://www.reid-consulting-uk.ltd.uk/docs/ffi.html">A Guide to Haskell's Foreign Function Interface</A> A guide to using the foreign function interface extension, using the rich set of functions in the Foreign libraries, design issues, and FFI preprocessors,
+
<LI>[http://www.reid-consulting-uk.ltd.uk/docs/ffi.html A Guide to Haskell's Foreign Function Interface] A guide to using the foreign function interface extension, using the rich set of functions in the Foreign libraries, design issues, and FFI preprocessors,
 
</ul>
 
</ul>
   
 
===References===
 
===References===
 
<ul>
 
<ul>
<li><a href="http://www.cs.uu.nl/~afie/haskell/tourofsyntax.html"><em>Tour of the Haskell Syntax</em></a> by Arjan van IJzendoorn.
+
<li>[http://www.cs.uu.nl/~afie/haskell/tourofsyntax.html <em>Tour of the Haskell Syntax</em>] by Arjan van IJzendoorn.
<li><a href="http://zvon.org/other/haskell/Outputglobal/index.html"><em>Haskell Reference</em></a> by Miloslav Nic.
+
<li>[http://zvon.org/other/haskell/Outputglobal/index.html <em>Haskell Reference</em>] by Miloslav Nic.
<li><a href="http://www.cs.uu.nl/~afie/haskell/tourofprelude.html"><em>A Tour of the Haskell Prelude</em></a> by Bernie Pope and Arjan van IJzendoorn.
+
<li>[http://www.cs.uu.nl/~afie/haskell/tourofprelude.html <em>A Tour of the Haskell Prelude</em>] by Bernie Pope and Arjan van IJzendoorn.
<li><a href="http://www.cse.unsw.edu.au/~paull/cs1011/inbuilt.html"><em>Useful Haskell functions</em></a>
+
<li>[http://www.cse.unsw.edu.au/~paull/cs1011/inbuilt.html <em>Useful Haskell functions</em>]
 
An explanation for beginners of many Haskell functions that are predefined in the Haskell Prelude.
 
An explanation for beginners of many Haskell functions that are predefined in the Haskell Prelude.
 
</ul>
 
</ul>
Line 298: Line 274:
 
=== Motivation for Using Haskell ===
 
=== Motivation for Using Haskell ===
 
<UL>
 
<UL>
<LI><A HREF="http://www.md.chalmers.se/~rjmh/Papers/whyfp.html"><EM>Why Functional Programming Matters</EM></A> by <A HREF="http://www.md.chalmers.se/~rjmh/">John Hughes</A>, The Computer Journal, Vol. 32, No. 2, 1989, pp. 98 - 107. Also in: David A. Turner (ed.): Research Topics in Functional Programming, Addison-Wesley, 1990, pp. 17 - 42.<BR>
+
<LI>[http://www.md.chalmers.se/~rjmh/Papers/whyfp.html <EM>Why Functional Programming Matters</EM>] by [http://www.md.chalmers.se/~rjmh/ John Hughes], The Computer Journal, Vol. 32, No. 2, 1989, pp. 98 - 107. Also in: David A. Turner (ed.): Research Topics in Functional Programming, Addison-Wesley, 1990, pp. 17 - 42.<BR>
 
Exposes the advantages of functional programming languages.
 
Exposes the advantages of functional programming languages.
 
Demonstrates how higher-order functions and lazy evaluation enable new forms
 
Demonstrates how higher-order functions and lazy evaluation enable new forms
 
of modularization of programs.
 
of modularization of programs.
  +
<P>
 
 
<LI>
 
<LI>
<A HREF="http://www.cs.ukc.ac.uk/pubs/1997/224/index.html"><EM>Higher-order + Polymorphic = Reusable</EM></A> by <A HREF="http://www.cs.ukc.ac.uk/people/staff/sjt/index.html">Simon Thompson</A>. Unpublished, May 1997.<BR>
+
[http://www.cs.ukc.ac.uk/pubs/1997/224/index.html <EM>Higher-order + Polymorphic = Reusable</EM>] by [http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson]. Unpublished, May 1997.<BR>
 
<STRONG>Abstract:</STRONG>
 
<STRONG>Abstract:</STRONG>
 
This paper explores how certain ideas in object oriented languages have their correspondents in functional languages. In particular we look at the analogue of the iterators of the C++ standard template library. We also give an example of the use of constructor classes which feature in Haskell 1.3 and Gofer.
 
This paper explores how certain ideas in object oriented languages have their correspondents in functional languages. In particular we look at the analogue of the iterators of the C++ standard template library. We also give an example of the use of constructor classes which feature in Haskell 1.3 and Gofer.
Line 310: Line 286:
 
</UL>
 
</UL>
   
<h3><a name="methods">Analysis and Design Methods</a></h3>
+
<h3><a name="methods Analysis and Design Methods]</h3>
   
 
<ul>
 
<ul>
<li><a href="http://www.cs.ukc.ac.uk/pubs/2001/1152/index.html"><em>FAD: A Functional Analysis and Design Methodology</em></a> by Dan Russell.
+
<li>[http://www.cs.ukc.ac.uk/pubs/2001/1152/index.html <em>FAD: A Functional Analysis and Design Methodology</em>] by Dan Russell.
 
Phd thesis, Computing Laboratory, University of Kent at Canterbury, January 2001.<br>
 
Phd thesis, Computing Laboratory, University of Kent at Canterbury, January 2001.<br>
 
<STRONG>Abstract:</STRONG>
 
<STRONG>Abstract:</STRONG>
Line 334: Line 310:
 
<UL>
 
<UL>
 
<LI>
 
<LI>
<A HREF="http://www.cs.ukc.ac.uk/pubs/1997/208/index.html"><EM>Where do I begin? A problem solving approach to teaching functional programming</EM></A>
+
[http://www.cs.ukc.ac.uk/pubs/1997/208/index.html <EM>Where do I begin? A problem solving approach to teaching functional programming</EM>]
by <A HREF="http://www.cs.ukc.ac.uk/people/staff/sjt/index.html">Simon Thompson</A>.
+
by [http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson].
 
In Krzysztof Apt, Pieter Hartel, and Paul Klint, editors, First International Conference on Declarative Programming Languages in Education. Springer-Verlag, September 1997.
 
In Krzysztof Apt, Pieter Hartel, and Paul Klint, editors, First International Conference on Declarative Programming Languages in Education. Springer-Verlag, September 1997.
 
<BR>
 
<BR>
Line 342: Line 318:
   
 
<LI>
 
<LI>
<A HREF="http://www.cs.ukc.ac.uk/pubs/1995/214/index.html"><EM>Functional programming through the curriculum</EM></A> by
+
[http://www.cs.ukc.ac.uk/pubs/1995/214/index.html <EM>Functional programming through the curriculum</EM>] by
<A HREF="http://www.cs.ukc.ac.uk/people/staff/sjt/index.html">Simon Thompson</A>and Steve Hill.
+
[http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson]and Steve Hill.
 
In Pieter H. Hartel and Rinus Plasmeijer, editors, Functional Programming
 
In Pieter H. Hartel and Rinus Plasmeijer, editors, Functional Programming
 
Languages in Education, LNCS 1022, pages 85-102. Springer-Verlag, December 1995.
 
Languages in Education, LNCS 1022, pages 85-102. Springer-Verlag, December 1995.
Line 356: Line 332:
 
<UL>
 
<UL>
 
<LI>
 
<LI>
<A HREF="http://www.cs.ukc.ac.uk/pubs/1992/123/index.html"><EM>Formulating Haskell</EM></A> by
+
[http://www.cs.ukc.ac.uk/pubs/1992/123/index.html <EM>Formulating Haskell</EM>] by
<A HREF="http://www.cs.ukc.ac.uk/people/staff/sjt/index.html">Simon Thompson</A>.
+
[http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson].
 
Technical Report 29-92*, University of Kent, Computing Laboratory, University of Kent, Canterbury, UK, November 1992.
 
Technical Report 29-92*, University of Kent, Computing Laboratory, University of Kent, Canterbury, UK, November 1992.
 
<BR>
 
<BR>
Line 364: Line 340:
 
</UL>
 
</UL>
   
<H3><A NAME="debugging">Debugging Programs</A></H3>
+
<H3><A NAME="debugging Debugging Programs]</H3>
   
 
<UL>
 
<UL>
<LI><A HREF="http://www.cs.mu.oz.au/~bjpop/thesis.ps.gz"><EM>Buddha: A Declarative Debugger for Haskell</EM></A> by <A HREF="http://www.cs.mu.oz.au/~bjpop/">Bernie Pope</A>. Honours Thesis.
+
<LI>[http://www.cs.mu.oz.au/~bjpop/thesis.ps.gz <EM>Buddha: A Declarative Debugger for Haskell</EM>] by [http://www.cs.mu.oz.au/~bjpop/ Bernie Pope]. Honours Thesis.
<li><a href="http://www-users.cs.york.ac.uk/~olaf/PUBLICATIONS/frejaHatHood.html"><em>Freja, Hat and Hood - A Comparative Evaluation of Three Systems for Tracing and Debugging Lazy Functional Programs</em></a> by Olaf Chitil, Colin Runciman and Malcolm Wallace.
+
<li>[http://www-users.cs.york.ac.uk/~olaf/PUBLICATIONS/frejaHatHood.html <em>Freja, Hat and Hood - A Comparative Evaluation of Three Systems for Tracing and Debugging Lazy Functional Programs</em>] by Olaf Chitil, Colin Runciman and Malcolm Wallace.
 
Proceedings of the 12th International Workshop on Implementation of Functional
 
Proceedings of the 12th International Workshop on Implementation of Functional
 
Languages, 2001.<br>
 
Languages, 2001.<br>
Line 375: Line 351:
 
practice by applying them to a number of moderately complex programs in which errors had deliberately been introduced. We identify the
 
practice by applying them to a number of moderately complex programs in which errors had deliberately been introduced. We identify the
 
strengths and weaknesses of each system and then form ideas on how the systems can be improved further.
 
strengths and weaknesses of each system and then form ideas on how the systems can be improved further.
<LI><A HREF="http://www.cs.mu.oz.au/~lee/papers/dd.html">Papers on declarative debugging</A>
+
<LI>[http://www.cs.mu.oz.au/~lee/papers/dd.html Papers on declarative debugging]
 
</UL>
 
</UL>
   
   
<H3><a name="monads">Using Monads</a></H3>
+
<H3><a name="monads Using Monads]</H3>
   
 
<UL>
 
<UL>
<LI><A HREF="http://www.nomaware.com/monads/html/"><EM>All About Monads</EM></a> by Jeff Newbern<br>
+
<LI>[http://www.nomaware.com/monads/html/ <EM>All About Monads</EM>] by Jeff Newbern<br>
 
This tutorial aims to explain the concept of a monad and its
 
This tutorial aims to explain the concept of a monad and its
 
application to functional programming in a way that is easy to
 
application to functional programming in a way that is easy to
Line 388: Line 364:
 
programmers. Familiarity with the Haskell language is assumed, but no
 
programmers. Familiarity with the Haskell language is assumed, but no
 
prior experience with monads is required.
 
prior experience with monads is required.
<LI><A HREF="http://www.dcs.gla.ac.uk/~nww/Monad.html"><EM>What the hell are Monads?</EM></A> by Noel Winstanley<BR>
+
<LI>[http://www.dcs.gla.ac.uk/~nww/Monad.html <EM>What the hell are Monads?</EM>] by Noel Winstanley<BR>
 
A basic introduction to monads, monadic programming and IO.
 
A basic introduction to monads, monadic programming and IO.
 
This introduction is presented by means of examples rather than theory, and assumes a little knowledge of
 
This introduction is presented by means of examples rather than theory, and assumes a little knowledge of
 
Haskell.
 
Haskell.
<LI><A HREF="http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm"><EM>Monads for the Working Haskell Programmer -- a short tutorial</EM></A>
+
<LI>[http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm <EM>Monads for the Working Haskell Programmer -- a short tutorial</EM>]
 
by Theodore Norvell.<BR>
 
by Theodore Norvell.<BR>
<LI><A HREF="http://www-fp.dcs.st-and.ac.uk/~kh/papers/io-tutorial/io-tutorial.html"><EM>Monadic I/O in Haskell 1.3</EM></A> by Andrew Gordon and Kevin Hammond.<BR>
+
<LI>[http://www-fp.dcs.st-and.ac.uk/~kh/papers/io-tutorial/io-tutorial.html <EM>Monadic I/O in Haskell 1.3</EM>] by Andrew Gordon and Kevin Hammond.<BR>
 
<STRONG>Abstract:</STRONG>
 
<STRONG>Abstract:</STRONG>
 
We describe the design and use of monadic I/O in Haskell 1.3, the latest revision of the lazy
 
We describe the design and use of monadic I/O in Haskell 1.3, the latest revision of the lazy
Line 412: Line 388:
 
by writing a simple exception handling system in Haskell using these features.
 
by writing a simple exception handling system in Haskell using these features.
 
->
 
->
<LI><A HREF="http://cm.bell-labs.com/cm/cs/who/wadler/topics/monads.html#monadsdeclare"><EM>How to Declare an Imperative</EM></A> by <A HREF="http://cm.bell-labs.com/cm/cs/who/wadler/">Philip Wadler</A>, International Logic Programming Symposium '95, MIT Press, 1995.
+
<LI>[http://cm.bell-labs.com/cm/cs/who/wadler/topics/monads.html#monadsdeclare <EM>How to Declare an Imperative</EM>] by [http://cm.bell-labs.com/cm/cs/who/wadler/ Philip Wadler], International Logic Programming Symposium '95, MIT Press, 1995.
 
An extended version will appear in ACM Computing Surveys.<BR>
 
An extended version will appear in ACM Computing Surveys.<BR>
 
<STRONG>Abstract:</STRONG>
 
<STRONG>Abstract:</STRONG>
Line 421: Line 397:
 
logic programming.
 
logic programming.
   
<LI><A HREF="http://cm.bell-labs.com/cm/cs/who/wadler/topics/monads.html#marktoberdorf"><EM>Monads for functional programming</EM></A> by <A HREF="http://cm.bell-labs.com/cm/cs/who/wadler/">Philip Wadler</A>, Marktoberdorf Summer School on Program Design Calculi,
+
<LI>[http://cm.bell-labs.com/cm/cs/who/wadler/topics/monads.html#marktoberdorf <EM>Monads for functional programming</EM>] by [http://cm.bell-labs.com/cm/cs/who/wadler/ Philip Wadler], Marktoberdorf Summer School on Program Design Calculi,
 
Springer Verlag, NATO ASI Series F: Computer and systems sciences,
 
Springer Verlag, NATO ASI Series F: Computer and systems sciences,
 
Volume 118, August 1992.<BR>
 
Volume 118, August 1992.<BR>
Line 433: Line 409:
 
monads can be used to build parsers.
 
monads can be used to build parsers.
   
<li><a href="http://www.research.avayalabs.com/user/wadler/topics/monads.html"><em>Comprehending monads</em></a> by <A HREF="http://cm.bell-labs.com/cm/cs/who/wadler/">Philip Wadler</A>, Mathematical Structures in Computer Science, Special issue of selected papers from 6'th Conference on Lisp and Functional Programming, 2:461-493, 1992. <br>
+
<li>[http://www.research.avayalabs.com/user/wadler/topics/monads.html <em>Comprehending monads</em>] by [http://cm.bell-labs.com/cm/cs/who/wadler/ Philip Wadler], Mathematical Structures in Computer Science, Special issue of selected papers from 6'th Conference on Lisp and Functional Programming, 2:461-493, 1992. <br>
 
<strong>Abstract:</strong>
 
<strong>Abstract:</strong>
 
Category theorists invented monads in the 1960's to concisely express certain aspects of universal algebra.
 
Category theorists invented monads in the 1960's to concisely express certain aspects of universal algebra.
Line 442: Line 418:
 
problem of destructive array update is also presented. No knowledge of category theory is assumed.
 
problem of destructive array update is also presented. No knowledge of category theory is assumed.
   
<LI><A HREF="http://cm.bell-labs.com/cm/cs/who/wadler/topics/monads.html#combining-monads"><EM>Combining monads</EM></A> by <A HREF="http://cm.bell-labs.com/cm/cs/who/wadler/">Philip Wadler</A>, Glasgow Workshop on Functional Programming, Springer Verlag Workshops in Computing Series,
+
<LI>[http://cm.bell-labs.com/cm/cs/who/wadler/topics/monads.html#combining-monads <EM>Combining monads</EM>] by [http://cm.bell-labs.com/cm/cs/who/wadler/ Philip Wadler], Glasgow Workshop on Functional Programming, Springer Verlag Workshops in Computing Series,
 
Ayr, July 1992.<BR>
 
Ayr, July 1992.<BR>
 
<STRONG>Abstract:</STRONG>
 
<STRONG>Abstract:</STRONG>
Line 450: Line 426:
 
<em>combined monad</em>.
 
<em>combined monad</em>.
   
<LI><A HREF="http://www.cs.nott.ac.uk/Department/Staff/gmh/bib.html#monparsing"><EM>Monadic Parser Combinators</EM></A> by <A NAME="Hutton&Meijer96">Graham Huttonand Erik Meijer</A>,
+
<LI>[http://www.cs.nott.ac.uk/Department/Staff/gmh/bib.html#monparsing <EM>Monadic Parser Combinators</EM>] by <A NAME="Hutton&Meijer96 Graham Huttonand Erik Meijer],
 
Technical report NOTTCS-TR-96-4, Department of Computer Science, University of Nottingham, 1996.
 
Technical report NOTTCS-TR-96-4, Department of Computer Science, University of Nottingham, 1996.
 
A condensed version of this report will appear as a functional pearl in JFP.<BR>
 
A condensed version of this report will appear as a functional pearl in JFP.<BR>
Line 457: Line 433:
 
</UL>
 
</UL>
   
<h3><a name="purity">Side Effects in a Pure Language</a></h3>
+
<h3><a name="purity Side Effects in a Pure Language]</h3>
   
 
<ul>
 
<ul>
<li><a href="http://research.microsoft.com/Users/simonpj/papers/marktoberdorf/"><em>Tackling the Awkward Squad: monadic I/O, concurrency, exceptions, and foreign-language calls in Haskell</em></a> by Simon Peyton Jones<br>
+
<li>[http://research.microsoft.com/Users/simonpj/papers/marktoberdorf/ <em>Tackling the Awkward Squad: monadic I/O, concurrency, exceptions, and foreign-language calls in Haskell</em>] by Simon Peyton Jones<br>
 
This tutorial focuses on explaining the "bits round the edges" of Haskell programs, rather than the beautiful functional core we all know and love. More specifically, it gives, in a single framework, an account of
 
This tutorial focuses on explaining the "bits round the edges" of Haskell programs, rather than the beautiful functional core we all know and love. More specifically, it gives, in a single framework, an account of
 
<ul>
 
<ul>
Line 475: Line 451:
 
=== Data Structures ===
 
=== Data Structures ===
 
<UL>
 
<UL>
<LI><A HREF="http://www.cs.columbia.edu/~cdo/">Chris Okasaki</A>: <A HREF="http://www.cup.org/Titles/63/0521631246.html"><EM>Purely Functional Data Structures</EM></A>, 232 pp., Cambridge University Press, 1998. ISBN 0-521-63124-6<BR>
+
<LI>[http://www.cs.columbia.edu/~cdo/ Chris Okasaki]: [http://www.cup.org/Titles/63/0521631246.html <EM>Purely Functional Data Structures</EM>], 232 pp., Cambridge University Press, 1998. ISBN 0-521-63124-6<BR>
 
From the cover:
 
From the cover:
 
<BLOCKQUOTE>
 
<BLOCKQUOTE>
Line 485: Line 461:
 
functional languages.This handy reference for professional programmers working with functional
 
functional languages.This handy reference for professional programmers working with functional
 
languages can also be used as a tutorial or for self-study.
 
languages can also be used as a tutorial or for self-study.
  +
<P>
 
<A HREF="http://www.cs.columbia.edu/~cdo/pfds-haskell.tar.gz">Haskell source code for the book</A>
+
[http://www.cs.columbia.edu/~cdo/pfds-haskell.tar.gz Haskell source code for the book]
 
</BLOCKQUOTE>
 
</BLOCKQUOTE>
<LI><EM><A HREF="http://www.iis.sinica.edu.tw/~trc/icfp96.ps">A probabilistic approach to the problem of automatic selection of data representations</A></EM> by
+
<LI><EM>[http://www.iis.sinica.edu.tw/~trc/icfp96.ps A probabilistic approach to the problem of automatic selection of data representations]</EM> by
 
Tyng-Ruey Chuang and Wen L. Hwang, In Proceedings of the 1996 ACM SIGPLAN International Conference on Functional Programming, pages 190-200. Philadephia, Pennsylvania, USA, May 1996.
 
Tyng-Ruey Chuang and Wen L. Hwang, In Proceedings of the 1996 ACM SIGPLAN International Conference on Functional Programming, pages 190-200. Philadephia, Pennsylvania, USA, May 1996.
 
</UL>
 
</UL>
Line 495: Line 471:
   
 
<UL>
 
<UL>
<LI><A HREF="http://www.dcs.gla.ac.uk/fp/workshops/fpw96/Proceedings96.html#PeytonJones"><EM>Bulk types with class</EM></A> by Simon Peyton Jones, (electronic) proceedings of the 1996 Glasgow Functional Programming Workshop.
+
<LI>[http://www.dcs.gla.ac.uk/fp/workshops/fpw96/Proceedings96.html#PeytonJones <EM>Bulk types with class</EM>] by Simon Peyton Jones, (electronic) proceedings of the 1996 Glasgow Functional Programming Workshop.
 
<BR>
 
<BR>
 
<STRONG>Abstract:</STRONG>
 
<STRONG>Abstract:</STRONG>
Line 505: Line 481:
   
 
<UL>
 
<UL>
<LI><EM>Functional Data Structures</EM> by Chris Okasaki. <A HREF="http://www.cse.ogi.edu/PacSoft/summerschool96.html"><EM>Advanced Functional Programming</EM></A>, Second International Summer School on Advanced Functional Programming Techniques, Evergreen State College, WA, USA, LNCS 1126, 1996 (editors: J. Launchbury, E. Meijer, T. Sheard), p.&nbsp;131-158.
+
<LI><EM>Functional Data Structures</EM> by Chris Okasaki. [http://www.cse.ogi.edu/PacSoft/summerschool96.html <EM>Advanced Functional Programming</EM>], Second International Summer School on Advanced Functional Programming Techniques, Evergreen State College, WA, USA, LNCS 1126, 1996 (editors: J. Launchbury, E. Meijer, T. Sheard), p.&nbsp;131-158.
<LI><EM><A HREF="http://foxnet.cs.cmu.edu/people/cokasaki/papers.html#random-access">Purely Functional Random-Access Lists</A></EM> by Chris Okasaki. Functional Programming Languages and Computer Architecture, June 1995, pages 86-95.
+
<LI><EM>[http://foxnet.cs.cmu.edu/people/cokasaki/papers.html#random-access Purely Functional Random-Access Lists]</EM> by Chris Okasaki. Functional Programming Languages and Computer Architecture, June 1995, pages 86-95.
<LI><EM><A HREF="http://foxnet.cs.cmu.edu/people/cokasaki/papers.html#queues">Simple and Efficient Purely Functional Queues and Deques</A></EM> by Chris Okasaki. Journal of Functional Programming, 5(4):583-592, October 1995.
+
<LI><EM>[http://foxnet.cs.cmu.edu/people/cokasaki/papers.html#queues Simple and Efficient Purely Functional Queues and Deques]</EM> by Chris Okasaki. Journal of Functional Programming, 5(4):583-592, October 1995.
<LI><EM><A HREF="http://foxnet.cs.cmu.edu/people/cokasaki/papers.html#priority">Optimal Purely Functional Priority Queues</A></EM> by Gerth St&oslash;lting Brodal and Chris Okasaki, Journal of Functional Programming, 6(6), December 1996.
+
<LI><EM>[http://foxnet.cs.cmu.edu/people/cokasaki/papers.html#priority Optimal Purely Functional Priority Queues]</EM> by Gerth St&oslash;lting Brodal and Chris Okasaki, Journal of Functional Programming, 6(6), December 1996.
<LI><EM><A HREF="http://www.iis.sinica.edu.tw/~trc/fpca93.ps">Real-time deques, multihead Turing machines, and purely functional programming.</A></EM> by Tyng-Ruey Chuang and Benjamin Goldberg, In Conference on Functional Programming Languages and Computer Architecture, pages 289-298. Copenhagen, Denmark, June 1993. ACM Press.
+
<LI><EM>[http://www.iis.sinica.edu.tw/~trc/fpca93.ps Real-time deques, multihead Turing machines, and purely functional programming.]</EM> by Tyng-Ruey Chuang and Benjamin Goldberg, In Conference on Functional Programming Languages and Computer Architecture, pages 289-298. Copenhagen, Denmark, June 1993. ACM Press.
 
</UL>
 
</UL>
   
 
==== Arrays ====
 
==== Arrays ====
 
<UL>
 
<UL>
<LI><EM><A HREF="http://www.iis.sinica.edu.tw/~trc/lfp94.ps">A randomized implementation of multiple functional arrays</A></EM> by Tyng-Ruey Chuang, In Proceedings of the 1994 ACM Conference on Lisp and Functional Programming, pages 173-184. Orlando, Florida, USA, June 1994.
+
<LI><EM>[http://www.iis.sinica.edu.tw/~trc/lfp94.ps A randomized implementation of multiple functional arrays]</EM> by Tyng-Ruey Chuang, In Proceedings of the 1994 ACM Conference on Lisp and Functional Programming, pages 173-184. Orlando, Florida, USA, June 1994.
 
<LI><EM>Fully persistent arrays for efficient incremental updates and voluminous reads</EM> by Tyng-Ruey Chuang.
 
<LI><EM>Fully persistent arrays for efficient incremental updates and voluminous reads</EM> by Tyng-Ruey Chuang.
 
In Bernd Krieg-Brueckner, editor, 4th European Symposium on Programming,
 
In Bernd Krieg-Brueckner, editor, 4th European Symposium on Programming,
Line 522: Line 498:
 
==== Graphs ====
 
==== Graphs ====
 
<UL>
 
<UL>
<LI><EM>Graph Algorithms with a Functional Flavour</EM> by <A HREF="http://www.cse.ogi.edu/~jl/">John Launchbury</A>, Advanced Functional Programming, First International Spring
+
<LI><EM>Graph Algorithms with a Functional Flavour</EM> by [http://www.cse.ogi.edu/~jl/ John Launchbury], Advanced Functional Programming, First International Spring
 
School on Advanced Functional Programming Techniques, Bastad, Sweden, LNCS 925,p.&nbsp;308-331, 1995 (editors: J. Jeuring, E. Meijer).
 
School on Advanced Functional Programming Techniques, Bastad, Sweden, LNCS 925,p.&nbsp;308-331, 1995 (editors: J. Jeuring, E. Meijer).
   
<LI><A HREF="http://www.cse.ogi.edu/~jl/biblio-functional.html"><EM>Structuring Depth First Search Algorithms in Haskell</EM></A> by David King and <A HREF="http://www.cse.ogi.edu/~jl/">John Launchbury</A>.
+
<LI>[http://www.cse.ogi.edu/~jl/biblio-functional.html <EM>Structuring Depth First Search Algorithms in Haskell</EM>] by David King and [http://www.cse.ogi.edu/~jl/ John Launchbury].
 
Proc. ACM Principles of Programming Languages, San Francisco, 1995.<BR>
 
Proc. ACM Principles of Programming Languages, San Francisco, 1995.<BR>
 
<STRONG>Abstract:</STRONG>
 
<STRONG>Abstract:</STRONG>
Line 541: Line 517:
   
 
<UL>
 
<UL>
<LI><A HREF="http://www.dcs.glasgow.ac.uk/jfp/bibliography/References/grantswz1996:143.html"><EM>Sparse matrix representations in a functional language</EM></A> by P.W. Grant, J.A. Sharp, M.F. Webster and X. Zhang, Journal of Functional Programming, 6(1):143-170, January 1996.<BR>
+
<LI>[http://www.dcs.glasgow.ac.uk/jfp/bibliography/References/grantswz1996:143.html <EM>Sparse matrix representations in a functional language</EM>] by P.W. Grant, J.A. Sharp, M.F. Webster and X. Zhang, Journal of Functional Programming, 6(1):143-170, January 1996.<BR>
 
<STRONG>Abstract:</STRONG>
 
<STRONG>Abstract:</STRONG>
 
This paper investigates several sparse matrix representation schemes and associated algorithms in Haskell for solving linear systems of equations arising from solving realistic computational fluid dynamics problems using a finite element algorithm. This work complements that of Wainwright and Sexton [J. Functional Programming, 2(1):61-72, 1992] in that a Choleski direct solver (with an emphasis on its forward/backward substitution steps) is examined. Experimental evidence comparing time and space efficiency of these matrix representation schemes is reported, together with associated forward/backward substitution implementations. Our results are in general agreement with Wainwright and Sexton's.
 
This paper investigates several sparse matrix representation schemes and associated algorithms in Haskell for solving linear systems of equations arising from solving realistic computational fluid dynamics problems using a finite element algorithm. This work complements that of Wainwright and Sexton [J. Functional Programming, 2(1):61-72, 1992] in that a Choleski direct solver (with an emphasis on its forward/backward substitution steps) is examined. Experimental evidence comparing time and space efficiency of these matrix representation schemes is reported, together with associated forward/backward substitution implementations. Our results are in general agreement with Wainwright and Sexton's.
 
</UL>
 
</UL>
   
<H3><a name="parsing">Parser Combinators</a></H3>
+
<H3><a name="parsing Parser Combinators]</H3>
   
 
<UL>
 
<UL>
<LI><EM>How to Replace Failure by a List of Successes</EM> by <A NAME="Wadler85">Philip Wadler</A>,
+
<LI><EM>How to Replace Failure by a List of Successes</EM> by <A NAME="Wadler85 Philip Wadler],
 
Functional Programming Languages and Computer Architecture, LNCS 201, 1985.
 
Functional Programming Languages and Computer Architecture, LNCS 201, 1985.
<LI><EM>Higher-order functions for parsing</EM> by <A NAME="Hutton92">Graham Hutton</A>,
+
<LI><EM>Higher-order functions for parsing</EM> by <A NAME="Hutton92 Graham Hutton],
 
J. Functional Programming 2(3):323-343, 1992.
 
J. Functional Programming 2(3):323-343, 1992.
<LI><A HREF="http://www.cs.nott.ac.uk/Department/Staff/gmh/bib.html#monparsing"><EM>Monadic Parser Combinators</EM></A> by <A NAME="Hutton&Meijer96">Graham Huttonand Erik Meijer</A>,
+
<LI>[http://www.cs.nott.ac.uk/Department/Staff/gmh/bib.html#monparsing <EM>Monadic Parser Combinators</EM>] by <A NAME="Hutton&Meijer96 Graham Huttonand Erik Meijer],
 
Technical report NOTTCS-TR-96-4, Department of Computer Science, University of Nottingham, 1996.
 
Technical report NOTTCS-TR-96-4, Department of Computer Science, University of Nottingham, 1996.
 
A condensed version of this report will appear as a functional pearl in JFP.<BR>
 
A condensed version of this report will appear as a functional pearl in JFP.<BR>
 
Besides being a tutorial on parser combinators it is also an introduction to monads in general.
 
Besides being a tutorial on parser combinators it is also an introduction to monads in general.
<LI><EM>Functional Parsers</EM> by <A NAME="Fokker95">Jeroen Fokker</A>,
+
<LI><EM>Functional Parsers</EM> by <A NAME="Fokker95 Jeroen Fokker],
 
First International Spring School on Advanced Functional Programming Techniques, LNCS 925, 1995.
 
First International Spring School on Advanced Functional Programming Techniques, LNCS 925, 1995.
<LI><EM>Predictive parser combinators need four values to report errors</EM> by <A NAME="Partridge&Wright96">Andrew Partridge, David Wright</A>,
+
<LI><EM>Predictive parser combinators need four values to report errors</EM> by <A NAME="Partridge&Wright96 Andrew Partridge, David Wright],
 
J. Functional Programming 6(2): 355-364, 1996.
 
J. Functional Programming 6(2): 355-364, 1996.
<LI><EM>Combinators for parsing expressions</EM> by <A NAME="Hill96">Steve Hill</A>,
+
<LI><EM>Combinators for parsing expressions</EM> by <A NAME="Hill96 Steve Hill],
 
J. Functional Programming 6(3):445-463, May 1996.
 
J. Functional Programming 6(3):445-463, May 1996.
<LI><A HREF="http://www.cse.ogi.edu/PacSoft/summerschool96.html#Parsers"><EM>Deterministic, Error-Correcting Combinator Parsers</EM></A>
+
<LI>[http://www.cse.ogi.edu/PacSoft/summerschool96.html#Parsers <EM>Deterministic, Error-Correcting Combinator Parsers</EM>]
by <A NAME="Swierstra&Duponcheel96">S. Doaitse Swierstra and Luc Duponcheel</A>, Second International Summer School on Advanced Functional Programming Techniques, LNCS 1126, 1996.
+
by <A NAME="Swierstra&Duponcheel96 S. Doaitse Swierstra and Luc Duponcheel], Second International Summer School on Advanced Functional Programming Techniques, LNCS 1126, 1996.
 
</UL>
 
</UL>
   
   
   
<H3><a name="schools">Schools on Advanced Funtional Programming</a></H3>
+
<H3><a name="schools Schools on Advanced Funtional Programming]</H3>
   
 
<UL>
 
<UL>
Line 586: Line 562:
 
</UL>
 
</UL>
   
<LI><A HREF="http://www.cse.ogi.edu/PacSoft/conf/summerschool96.html"><EM>Advanced Functional Programming</EM></A>, Second International Summer School on Advanced Functional Programming Techniques, Evergreen State College, WA, USA, LNCS 1126, Springer-Verlag, 1996 (editors: J. Launchbury, E. Meijer, T. Sheard).
+
<LI>[http://www.cse.ogi.edu/PacSoft/conf/summerschool96.html <EM>Advanced Functional Programming</EM>], Second International Summer School on Advanced Functional Programming Techniques, Evergreen State College, WA, USA, LNCS 1126, Springer-Verlag, 1996 (editors: J. Launchbury, E. Meijer, T. Sheard).
 
<UL>
 
<UL>
 
<LI><EM>Composing the User Interface with Haggis</EM> by Sigbjorn Finne and Simon Peyton Jones, p.&nbsp;1-37.
 
<LI><EM>Composing the User Interface with Haggis</EM> by Sigbjorn Finne and Simon Peyton Jones, p.&nbsp;1-37.
Line 598: Line 574:
 
</UL>
 
</UL>
   
<LI><A HREF="http://alfa.di.uminho.pt/~afp98/">Advanced Functional Programming, Third International School, AFP'98</A>,
+
<LI>[http://alfa.di.uminho.pt/~afp98/ Advanced Functional Programming, Third International School, AFP'98],
 
in Braga, Portugal from 12th to 19th September 1998, LNCS 1608, Springer-Verlag, 1999
 
in Braga, Portugal from 12th to 19th September 1998, LNCS 1608, Springer-Verlag, 1999
 
(editors: D. Swierstra, P. Henriques and J. Oliveira).<BR>
 
(editors: D. Swierstra, P. Henriques and J. Oliveira).<BR>
Line 607: Line 583:
 
== Foundations ==
 
== Foundations ==
 
<ul>
 
<ul>
<li>Paul Taylor: <a href="http://www.dcs.qmul.ac.uk/~pt/Practical_Foundations/">Practical Foundations of Mathematics</a><br>
+
<li>Paul Taylor: [http://www.dcs.qmul.ac.uk/~pt/Practical_Foundations/ Practical Foundations of Mathematics]<br>
 
Cambridge University Press, ISBN: 0-521-63107-6, xii+576 pages, September 2000.
 
Cambridge University Press, ISBN: 0-521-63107-6, xii+576 pages, September 2000.
<li>Michael Barr and Charles Wells: <a href="http://www.cwru.edu/artsci/math/wells/pub/ttt.html">Toposes, Triples and Theories</a><br>
+
<li>Michael Barr and Charles Wells: [http://www.cwru.edu/artsci/math/wells/pub/ttt.html Toposes, Triples and Theories]<br>
 
The revised version of their
 
The revised version of their
 
formerly Springer Verlag published book is
 
formerly Springer Verlag published book is

Revision as of 03:56, 25 January 2006

The Haskell Bookshelf

Language Definition

Simon Peyton Jones: [http://titles.cambridge.org/catalogue.asp?isbn=0521826144 Haskell 98 Language and Libraries], Cambridge University Press, 2003, Hardback, 272 pages, ISBN: 0521826144, £35.00

Book Description
Haskell is the world's leading lazy functional programming language, widely used for teaching, research, and applications. The language continues to develop rapidly, but in 1998 the community decided to capture a stable snapshot of the language: Haskell 98. All Haskell compilers support Haskell 98, so practitioners and educators alike have a stable base for their work. This book constitutes the agreed definition of the Haskell 98, both the language itself and its supporting libraries. It has been considerably revised and refined since the original definition, and appears in print for the first time. It should be a standard reference work for anyone involved in research, teaching, or application of Haskell.

Textbooks

Paul Hudak: [http://www.haskell.org/soe The Haskell School of Expression: Learning Functional Programming through Multimedia], Cambridge University Press, New York, 2000, 416 pp, 15 line diagrams, 75 exercises, Paperback $29.95, ISBN: 0521644089, Hardback $74.95, ISBN: 0521643384

Book Description

This book teaches functional programming as a way of thinking and problem solving, using Haskell, the most popular purely functional language. Rather than using the conventional mathematical examples commonly found in other programming language textbooks, the author draws examples from multimedia applications, including graphics, animation, and computer music, thus rewarding the reader with working programs for inherently more interesting applications. Aimed at both beginning and advanced programmers, this tutorial begins with a gentle introduction to functional programming and moves rapidly on to more advanced topics. An underlying theme is the design and implementation of domain specific languages, using three examples: FAL (a Functional Animation Language), IRL (an Imperative Robot Language), and MDL (a Music Description Language). Details about programming in Haskell are presented in boxes throughout the text so they can be easily referred to and found quickly.

The book's Web Site contains source files for all programs in the text, as well as the graphics libraries to run them under Windows and Linux platforms. It also contains PowerPoint slides useful for teaching a course using the textbook.

Simon Thompson: Haskell: The Craft of Functional Programming, Second Edition, Addison-Wesley, 507 pages, paperback, 1999. ISBN 0-201-34275-8.

Book Description
The second edition of Haskell: The Craft of Functional Programming is essential reading for beginners to functional programming and newcomers to the Haskell programming language. The emphasis is on the process of crafting programs and the text contains many examples and running case studies, as well as advice an program design, testing, problem solving and how to avoid common pitfalls.

Building on the strengths of the first edition, the book includes many new and improved features:

  • Complete coverage of Haskell 98, the standard version of Haskell which will be stable and supported by implementations for years to come.
  • An emphasis on software engineering principles, encouraging a disciplined approach to building reusable libraries of software components.
  • Detailed coverage of the Hugs interpreter with an appendix covering other implementations.
  • A running case study of pictures emphasizes the built-in functions which appear in the standard prelude and libraries. It is also used to give an early preview of some of the more complex language features, such as high-order functions.
  • List comprehensions and the standard functions over lists are covered before recursion.
  • Early coverage of polymorphism supporting the "toolkit" approach and encouraging the resuse of built-in functions and types.
  • Extensive reference material containing details of further reading in books, journals and on the World Wide Web.
  • Accompanying Web Site supporting the book, containing all the program code, further teaching materials and other useful resources.

Synopsis
This books introduces Haskell at a level appropriate for those with little or no prior experience of functional programming. The emphasis is on the process of crafting programs, solving problems, and avoiding common errors.

Richard Bird: Introduction to Functional Programming using Haskell, 2nd edition, Prentice Hall Press, 1998, 460 pp., ISBN: 0-13-484346-0.
From the cover:

After the success of the first edition, Introduction to Functional Programming using Haskell has been thoroughly updated and revised to provide a complete grounding in the principles and techniques of programming with functions.

The second edition uses the popular language Haskell to express functional programs. There are new chapters on program optimisation, abstract datatypes in a functional setting, and programming in a monadic style. There are completely new case studies, and many new exercises.

As in the first edition, there is an emphasis on the fundamental techniques for reasoning about functional programs, and for deriving them systematically from their specifications.

The book is self-contained, assuming no prior knowledge of programming, and is suitable as an introductory undergraduate text for first- or second-year students.

Antony Davie: An Introduction to Functional Programming Systems Using Haskell, Cambridge University Press, 1992. ISBN 0-521-25830-8 (hardback). ISBN 0-521-27724-8 (paperback).
Cover:

Functional programming is a style of programming that has become increasingly popular during the past few years. Applicative programs have the advantage of being almost immediately expressible as functional descriptions; they can be proved correct and transformed through the referential transparency property.

This book presents the basic concepts of functional programming, using the language Haskell for examples. The author incorporates a discussion of lambda calculus and its relationship with Haskell, exploring the implications for parallelism. Contents: SASL for Beginners / Examples of SASL Programming / More Advanced Applicative Programming Techniques / Lambda Calculus / The Relationship Between Lambda Calculus and SASL / Program Transformation and Efficiency / Correctness, Equivalence and Program Verification / Landin's SECD Machine and Related Implementations / Further Implementation Techniques / Special Purpose Hardware / The Applicative Style of Semantics / Other Applicative Languages / Implications for Parallelism / Functional Programming in Von Neumann Languages

Fethi Rabhi and Guy Lapalme: Algorithms: A functional programming approach, Addison-Wesley, 235 pages, paperback, 1999. ISBN 0-201-59604-0

Book Description
The authors challenge more traditional methods of teaching algorithms by using a functional programming context, with Haskell as an implementation language. This leads to smaller, clearer and more elegant programs which enable the programmer to understand the algorithm more quickly and to use that understanding to explore alternative solutions.
Key features:

  • Most chapters are self-contained and can be taught independently from each other.
  • All programs are in Haskell'98 and provided on a WWW site.
  • End of chapter exercises throughout.
  • Comprehensive index and bibliographical notes.

Synopsis
The book is organised as a classic algorithms book according to topics such as Abstract Data Types, sorting and searching. It uses a succession of practical programming examples to develop in the reader problem-solving skills which can be easily transferred to other language paradigms. It also introduces the idea of capturing algorithmic design strategies (e.g. Divide-and-Conquer, Dynamic Programming) through higher-order functions.
Target audience
The book is intended for computer science students taking algorithms and/or (basic or advanced) functional programming courses.

Jeremy Gibbons and Oege de Moor (eds.): The Fun of Programming,Palgrave, 2002, 288 pages. ISBN 0333992857.

Book description:
In this textbook, leading researchers give tutorial expositions on the current state of the art of functional programming. The text is suitable for an undergraduate course immediately following an introduction to functional programming, and also for self-study. All new concepts are illustrated by plentiful examples, as well as exercises. A website gives access to accompanying software.

Cordelia Hall and John O'Donnell: Discrete Mathematics Using a Computer, Springer, 2000, 360 pages. ISBN 1-85233-089-9.

Book description:
This book introduces the main topics of discrete mathematics with a strong emphasis on applications to computer science. It uses computer programs to implement and illustrate the mathematical ideas, helping the reader to gain a concrete understanding of the abstract mathematics. The programs are also useful for practical calculations, and they can serve as a foundation for larger software packages.

Designed for first and second year undergraduate students, the book is also ideally suited to self-study. No prior knowledge of functional programming is required; the book and the online documentation provide everything you will need.

Kees Doets and Jan van Eijck: The Haskell Road to Logic, Maths and Programming. King's College Publications, London, 2004. ISBN 0-9543006-9-6 (14.00 pounds, $25.00).

Book description:
The purpose of this book is to teach logic and mathematical reasoning in practice, and to connect logical reasoning with computer programming. Throughout the text, abstract concepts are linked to concrete representations in Haskell. Everything one has to know about programming in Haskell to understand the examples in the book is explained as we go along, but we do not cover every aspect of the language. Haskell is a marvelous demonstration tool for logic and maths because its functional character allows implementations to remain very close to the concepts that get implemented, while the laziness permits smooth handling of infinite data structures.

We do not assume that our readers have previous experience with either programming or construction of formal proofs. We do assume previous acquaintance with mathematical notation, at the level of secondary school mathematics. Wherever necessary, we will recall relevant facts. Everything one needs to know about mathematical reasoning or programming is explained as we go along. We do assume that our readers are able to retrieve software from the Internet and install it, and that they know how to use an editor for constructing program texts.

After having worked through the material in the book, i.e., after having digested the text and having carried out a substantial number of the exercises, the reader will be able to write interesting programs, reason about their correctness, and document them in a clear fashion. The reader will also have learned how to set up mathematical proofs in a structured way, and how to read and digest mathematical proofs written by others.

The book can be used as a course textbook, but since it comes with solutions to all exercises (electronically available from the authors upon request) it is also well suited for private study. The source code of all programs discussed in the text, a list of errata, further relevant material and an email link to the authors can be found here.

Simon Peyton Jones: Implementation of Functional Programming Language,Prentice-Hall, 1987. ISBN 0134533259.
Simon Peyton Jones, David Lester: Implementing Functional Languages, 1992.

The book is out of print. The full sources and a postscript version are available for free.


Papers available on the Web

General Introductions to Haskell

  • [../tutorial/ A Gentle Introduction to Haskell] by Paul Hudak, John Peterson, and Joseph H. Fasel.
    The title is a bit misleading. Some knowledge of another functional programming language is expected. The emphasis is on the type system and those features which are really new in Haskell (compared to other functional programming languages).
  • Beginning Haskell from IBM developerWorks
    This tutorial targets programmers of imperative languages wanting to learn about functional programming in the language Haskell. If you have programmed in languages such as C, Pascal, Fortran, C++, Java, Cobol, Ada, Perl, TCL, REXX, JavaScript, Visual Basic, or many others, you have been using an imperative paradigm. This tutorial provides a gentle introduction to the paradigm of functional programming, with specific illustrations in the Haskell 98 language. (Free registration required.)

  • Yet Another Haskell Tutorial by Hal Daume III et al. (Postscript, Pdf)
    A tutorial for Haskell that is still under construction but covers already much ground.

  • Haskell Companion by Jan Skibinski
    A tutorial on most common concepts and definitions of functional language Haskell.
  • Online Haskell Course by Ralf Hinze (in German).
  • [functional-programming.dvi Functional Programming by Jeroen Fokker, 1995.](153 pages, 600 KB)
    Textbook for learning functional programming with Gofer. Here without Chapters 6 and 7.
  • Two Dozen Short Lessons in Haskell by Rex Page. A draft of a textbook on functional programming, available by ftp. It calls for active participation from readers by omitting material at certain points and asking the reader to attempt to fill in the missing information based on knowledge they have already acquired. The missing information is then supplied on the reverse side of the page.
  • [haskeller.dvi The Little Haskeller] by Cordelia Hall and John Hughes, 9. November 1993, 26 pages.
    An introduction using the Chalmers Haskell B interpreter (hbi). Attention: it relies very much on the user interface of hbi which is quite different for other Haskell systems.
  • Haskell Tutorial by José Barros and João Almeida. From a course given at the 3rd International Summer School on Advanced Functional Programming.

  • Haskell for Miranda Programmers by Kevin Glynn and Bernie Pope.

  • PLEAC-Haskell
    Following the Perl Cookbook (by Tom Christiansen and Nathan Torkington, published by O'Reilly) spirit, the PLEAC Project aims to gather fans of programming, in order to implement the solutions in other programming languages.

  • Haskell-Tutorial by Damir Medak and Gerhard Navratil
    The fundamentals of functional languages for beginners.
  • A Guide to Haskell's Foreign Function Interface A guide to using the foreign function interface extension, using the rich set of functions in the Foreign libraries, design issues, and FFI preprocessors,

References


Motivation for Using Haskell

  • Why Functional Programming Matters by John Hughes, The Computer Journal, Vol. 32, No. 2, 1989, pp. 98 - 107. Also in: David A. Turner (ed.): Research Topics in Functional Programming, Addison-Wesley, 1990, pp. 17 - 42.
    Exposes the advantages of functional programming languages. Demonstrates how higher-order functions and lazy evaluation enable new forms of modularization of programs.
  • Higher-order + Polymorphic = Reusable by Simon Thompson. Unpublished, May 1997.
    Abstract: This paper explores how certain ideas in object oriented languages have their correspondents in functional languages. In particular we look at the analogue of the iterators of the C++ standard template library. We also give an example of the use of constructor classes which feature in Haskell 1.3 and Gofer.

<a name="methods Analysis and Design Methods]

  • FAD: A Functional Analysis and Design Methodology by Dan Russell. Phd thesis, Computing Laboratory, University of Kent at Canterbury, January 2001.
    Abstract: This thesis presents the functional analysis and design methodology FAD. By functional we mean that it naturally supports software development within the functional programming paradigm (FP).

    Every popular methodology has a graphical modelling language which presents various pictorial representations of a system. FAD's modelling language provides the typical elements of functional programming, types and functions, plus elements to support modular development such as modules, subsystems and two forms of signature which specify an interface or a behavioural requirement. The language also includes relationships and associations between these elements, and provides simple representations of functional designs. The methodology has an integrated set of techniques which guide the development of an implementable solution from the deliverables of requirements engineering. FAD's data dictionary provides an organised repository for entities during and after development.

    The thesis thus provides a development medium which has hitherto been absent from the functional programming paradigm.


Teaching Haskell

  • Where do I begin? A problem solving approach to teaching functional programming by Simon Thompson. In Krzysztof Apt, Pieter Hartel, and Paul Klint, editors, First International Conference on Declarative Programming Languages in Education. Springer-Verlag, September 1997.
    Abstract: This paper introduces a problem solving method for teaching functional programming, based on Polya's `How To Solve It', an introductory investigation of mathematical method. We first present the language independent version, and then show in particular how it applies to the development of programs in Haskell. The method is illustrated by a sequence of examples and a larger case study.
  • Functional programming through the curriculum by Simon Thompsonand Steve Hill. In Pieter H. Hartel and Rinus Plasmeijer, editors, Functional Programming Languages in Education, LNCS 1022, pages 85-102. Springer-Verlag, December 1995.
    Abstract: This paper discusses our experience in using a functional language in topics across the computer science curriculum. After examining the arguments for taking a functional approach, we look in detail at four case studies from different areas: programming language semantics, machine architectures, graphics and formal languages.


Proving Program Correctness

  • Formulating Haskell by Simon Thompson. Technical Report 29-92*, University of Kent, Computing Laboratory, University of Kent, Canterbury, UK, November 1992.
    Abstract: The functional programming language Haskell is examined from the point of view of proving programs correct. Particular features explored include the data type definition facilities, classes, the behaviour of patterns and guards and the monad approach to IO in the Glasgow Haskell compiler.

<A NAME="debugging Debugging Programs]


<a name="monads Using Monads]

  • All About Monads by Jeff Newbern
    This tutorial aims to explain the concept of a monad and its application to functional programming in a way that is easy to understand and useful to beginning and intermediate Haskell programmers. Familiarity with the Haskell language is assumed, but no prior experience with monads is required.
  • What the hell are Monads? by Noel Winstanley
    A basic introduction to monads, monadic programming and IO. This introduction is presented by means of examples rather than theory, and assumes a little knowledge of Haskell.
  • Monads for the Working Haskell Programmer -- a short tutorial by Theodore Norvell.
  • Monadic I/O in Haskell 1.3 by Andrew Gordon and Kevin Hammond.
    Abstract: We describe the design and use of monadic I/O in Haskell 1.3, the latest revision of the lazy functional programming language Haskell. Haskell 1.3 standardises the monadic I/O mechanisms now available in many Haskell systems. The new facilities allow fairly sophisticated text-based application programs to be written portably in Haskell. The standard provides implementors with a flexible framework for extending Haskell to incorporate new language features. Apart from the use of monads, the main advances over the previous standard are: character I/O based on handles (analogous to ANSI C file pointers), an error handling mechanism, terminal interrupt handling and a POSIX interface. Apart from a tutorial description of the new facilities we include a worked example: a derived monad for combinator parsing. <!- "http://www.engr.uconn.edu/~jeffm/FuncProg/Papers/monad.html" Monads Made Easy by Ahmed Hammad From the Introduction: This paper is designed to help others who want to know about Monads, but don't want an overly technical explanation. Here I explain the basics, what monads are, what they are good for, and how to employ them. I do this by writing a simple exception handling system in Haskell using these features. ->
  • How to Declare an Imperative by Philip Wadler, International Logic Programming Symposium '95, MIT Press, 1995. An extended version will appear in ACM Computing Surveys.
    Abstract: This tutorial describes the use of a monad to integrate interaction into a purely declarative language. This technique has been implemented in the higher-order functional language Haskell. A sketch is given of how it might be added to a first-order language for logic programming.
  • Monads for functional programming by Philip Wadler, Marktoberdorf Summer School on Program Design Calculi, Springer Verlag, NATO ASI Series F: Computer and systems sciences, Volume 118, August 1992.
    Abstract: The use of monads to structure functional programs is described. Monads provide a convenient framework for simulating effects found in other languages, such as global state, exception handling, output, or non-determinism. Three case studies are looked at in detail: how monads ease the modification of a simple evaluator; how monads act as the basis of a datatype of arrays subject to in-place update; and how monads can be used to build parsers.
  • Comprehending monads by Philip Wadler, Mathematical Structures in Computer Science, Special issue of selected papers from 6'th Conference on Lisp and Functional Programming, 2:461-493, 1992.
    Abstract: Category theorists invented monads in the 1960's to concisely express certain aspects of universal algebra. Functional programmers invented list comprehensions in the 1970's to concisely express certain programs involving lists. This paper shows how list comprehensions may be generalised to an arbitrary monad, and how the resulting programming feature can concisely express in a pure functional language some programs that manipulate state, handle exceptions, parse text, or invoke continuations. A new solution to the old problem of destructive array update is also presented. No knowledge of category theory is assumed.
  • Combining monads by Philip Wadler, Glasgow Workshop on Functional Programming, Springer Verlag Workshops in Computing Series, Ayr, July 1992.
    Abstract: Monads provide a way of structuring functional programs. Most real applications require a combination of primitive monads. Here we describe how some monads may be combined with others to yield a combined monad.
  • Monadic Parser Combinators by <A NAME="Hutton&Meijer96 Graham Huttonand Erik Meijer], Technical report NOTTCS-TR-96-4, Department of Computer Science, University of Nottingham, 1996. A condensed version of this report will appear as a functional pearl in JFP.
    Besides being a tutorial on parser combinators it is also an introduction to monads in general.

<a name="purity Side Effects in a Pure Language]

  • Tackling the Awkward Squad: monadic I/O, concurrency, exceptions, and foreign-language calls in Haskell by Simon Peyton Jones
    This tutorial focuses on explaining the "bits round the edges" of Haskell programs, rather than the beautiful functional core we all know and love. More specifically, it gives, in a single framework, an account of
    • monadic input/output (the I/O monad)
    • concurrency (threads, MVars)
    • exceptions (both synchronous and asynchronous)
    • foreign language interfaces

    The common feature of all of these is, of course, the ubiquitous I/O monad. All except the first (basic I/O) involve proposed extensions to Haskell that are implemented in GHC, and I have tried hard to make the tutorial use exactly the same function names as GHC does. All of the extensions are described in conference papers (also available from my home page), but these papers are not tutorials, and were written with varying nomenclature over a period of several years. I hope that this tutorial gives a more comprehensible overview of the big picuture, using a common vocabulary.


Data Structures

  • Chris Okasaki: Purely Functional Data Structures, 232 pp., Cambridge University Press, 1998. ISBN 0-521-63124-6
    From the cover:

    Most books on data structures assume an imperative language like C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Haskell, or Scheme. This book describes data structures and data structure design techniques from the point of view of functional languages. It includes code for a wide assortment both of classical data structures and of data structures developed exclusively for functional languages.This handy reference for professional programmers working with functional languages can also be used as a tutorial or for self-study.

    Haskell source code for the book

  • A probabilistic approach to the problem of automatic selection of data representations by Tyng-Ruey Chuang and Wen L. Hwang, In Proceedings of the 1996 ACM SIGPLAN International Conference on Functional Programming, pages 190-200. Philadephia, Pennsylvania, USA, May 1996.

Collections

  • Bulk types with class by Simon Peyton Jones, (electronic) proceedings of the 1996 Glasgow Functional Programming Workshop.
    Abstract: Bulk types - such as lists, bags, sets, finite maps, and priority queues - are ubiquitous in programming. Yet many languages don't support them well, even though they have received a great deal of attention, especially from the database community. Haskell is currently among the culprits. This paper has two aims: to identify some of the technical difficulties, and to attempt to address them using Haskell's constructor classes.

List-like data structures

Arrays

  • A randomized implementation of multiple functional arrays by Tyng-Ruey Chuang, In Proceedings of the 1994 ACM Conference on Lisp and Functional Programming, pages 173-184. Orlando, Florida, USA, June 1994.
  • Fully persistent arrays for efficient incremental updates and voluminous reads by Tyng-Ruey Chuang. In Bernd Krieg-Brueckner, editor, 4th European Symposium on Programming, pages 110-129. Rennes, France, February 1992. LNCS 582. Springer-Verlag.

Graphs

  • Graph Algorithms with a Functional Flavour by John Launchbury, Advanced Functional Programming, First International Spring School on Advanced Functional Programming Techniques, Bastad, Sweden, LNCS 925,p. 308-331, 1995 (editors: J. Jeuring, E. Meijer).
  • Structuring Depth First Search Algorithms in Haskell by David King and John Launchbury. Proc. ACM Principles of Programming Languages, San Francisco, 1995.
    Abstract: Depth-first search is the key to a wide variety of graph algorithms. In this paper we express depth-first search in a lazy functional language, obtaining a linear-time implementation. Unlike traditional imperative presentations, we use the structuring methods of functional languages to construct algorithms from individual reusable components. This style of algorithm construction turns out to be quite amenable to formal proof, which we exemplify through a calculational-style proof of a far from obvious strongly-connected components algorithm.

Others

  • Sparse matrix representations in a functional language by P.W. Grant, J.A. Sharp, M.F. Webster and X. Zhang, Journal of Functional Programming, 6(1):143-170, January 1996.
    Abstract: This paper investigates several sparse matrix representation schemes and associated algorithms in Haskell for solving linear systems of equations arising from solving realistic computational fluid dynamics problems using a finite element algorithm. This work complements that of Wainwright and Sexton [J. Functional Programming, 2(1):61-72, 1992] in that a Choleski direct solver (with an emphasis on its forward/backward substitution steps) is examined. Experimental evidence comparing time and space efficiency of these matrix representation schemes is reported, together with associated forward/backward substitution implementations. Our results are in general agreement with Wainwright and Sexton's.

<a name="parsing Parser Combinators]

  • How to Replace Failure by a List of Successes by <A NAME="Wadler85 Philip Wadler], Functional Programming Languages and Computer Architecture, LNCS 201, 1985.
  • Higher-order functions for parsing by <A NAME="Hutton92 Graham Hutton], J. Functional Programming 2(3):323-343, 1992.
  • Monadic Parser Combinators by <A NAME="Hutton&Meijer96 Graham Huttonand Erik Meijer], Technical report NOTTCS-TR-96-4, Department of Computer Science, University of Nottingham, 1996. A condensed version of this report will appear as a functional pearl in JFP.
    Besides being a tutorial on parser combinators it is also an introduction to monads in general.
  • Functional Parsers by <A NAME="Fokker95 Jeroen Fokker], First International Spring School on Advanced Functional Programming Techniques, LNCS 925, 1995.
  • Predictive parser combinators need four values to report errors by <A NAME="Partridge&Wright96 Andrew Partridge, David Wright], J. Functional Programming 6(2): 355-364, 1996.
  • Combinators for parsing expressions by <A NAME="Hill96 Steve Hill], J. Functional Programming 6(3):445-463, May 1996.
  • Deterministic, Error-Correcting Combinator Parsers by <A NAME="Swierstra&Duponcheel96 S. Doaitse Swierstra and Luc Duponcheel], Second International Summer School on Advanced Functional Programming Techniques, LNCS 1126, 1996.


<a name="schools Schools on Advanced Funtional Programming]

  • Advanced Functional Programming, First International Spring School on Advanced Functional Programming Techniques, Bastad, Sweden, LNCS 925, Springer-Verlag, 1995 (editors: J. Jeuring, E. Meijer).
    • Functional Parsers by Jeroen Fokker, p. 1-23.
    • Monads for functional programming by Philip Wadler, p. 24-52.
    • The Design of a Pretty-printing Library by John Hughes, p. 52-96.
    • Functional Programming with Overloading and Higher-Order Polymorphism, Mark P. Jones, p. 97-136.
    • Programming with Fudgets by Thomas Hallgren and Magnus Carlsson, p. 137-182.
    • Constructing Medium Sized Efficient Functional Programs in Clean by Marko C.J.D. van Eekelen and Rinus J. Plasmeijer, p. 183-227.
    • Merging Monads and Folds for Functional Programming by Erik Meijer and Johan Jeuring, p. 228-266.
    • Programming with Algebras by Richard B. Kieburtz and Jeffrey Lewis, p. 267-307.
    • Graph Algorithms with a Functional Flavour by John Launchbury, p. 308-331.
  • Advanced Functional Programming, Second International Summer School on Advanced Functional Programming Techniques, Evergreen State College, WA, USA, LNCS 1126, Springer-Verlag, 1996 (editors: J. Launchbury, E. Meijer, T. Sheard).
    • Composing the User Interface with Haggis by Sigbjorn Finne and Simon Peyton Jones, p. 1-37.
    • Haskore Music Tutorial by Paul Hudak, p. 38-67.
    • Polytypic Programming by Johan Jeuring and Patrick Jansson, p. 68-114.
    • Implementing Threads in Standard ML by Peter Lee, p. 115-130.
    • Functional Data Structures by Chris Okasaki, p. 131-158.
    • Heap Profiling for Space Efficiency by Colin Runciman and Niklas Röjemo, p. 159-183.
    • Deterministic, Error-Correcting Combinator Parsers by S. Doaitse Swierstra and Luc Duponcheel, p. 184-207.
    • Essentials of Standard ML Modules by Mads Tofte, p. 208-238.
  • Advanced Functional Programming, Third International School, AFP'98, in Braga, Portugal from 12th to 19th September 1998, LNCS 1608, Springer-Verlag, 1999 (editors: D. Swierstra, P. Henriques and J. Oliveira).
    All lecture notes and further material are available from the web site.


Foundations

  • Paul Taylor: Practical Foundations of Mathematics
    Cambridge University Press, ISBN: 0-521-63107-6, xii+576 pages, September 2000.
  • Michael Barr and Charles Wells: Toposes, Triples and Theories
    The revised version of their formerly Springer Verlag published book is online for free download. Note that they use the name triple instead of monad.