Depending upon a teacher's preferences and the context in which the course is taught, different routes through the book exist. The ordering of the text roughly corresponds to the first year course at the University of Kent, although the material here is much expanded from that given to our students.
The book follows a linear progression, and it makes sense to follow it from Chapter 1 to Chapter 14; if time does not permit, a coherent course on smaller-scale programming is given by the first Part; together with the second, students will gain an additional grounding in the novelties of functional programming, whilst more advanced techniques are introduced in Part III.
In Part III it is possible to pick and choose Chapters and Sections, rather than following the material page-by-page. The case studies illustrate the material, but a teacher could use his or her own examples rather than those of Huffman coding or relations and graphs, for instance. The calculator and simulation examples are distributed through Part III; another approach would be to delay them until all the supporting material has been studied.
Integral to this course is reasoning about programs, but the material on proof in this text stands independently, and so a proof-free course could be given, omitting Chapters 3 and 5, and Sections 7.7, 9.6 and 13.7. It would also be feasible to give the proof material rather later than it appears in the text. Also standing alone is the material on program behaviour; this could be omitted if so desired.
It is impossible to exclude some more technical Sections from the book, but some of this material could be deferred, mentioned in passing or given an informal gloss. In the first two Parts, Sections 5.4, 8.3 and 8.4 are potential candidates.
Students should be encouraged to use the information in the Appendices. Depending upon their backgrounds, the comparison of functional and imperative programming can be illuminating in both directions; at the University of Kent we find that linking the treatment of lists in Miranda and in an imperative language is very helpful for students who are learning the intricacies of pointer-based linked lists
Also to be recommended to students is the glossary; both for beginners to programming, and to those familiar with other programming paradigms, some of the terminology of functional programming is either new or consists of common terms used in a slightly different way from the norm. In either case, students should be encouraged to look up words they are unsure about. Also in the appendices are a full treatment of common errors, a reminder of the different ways to understand an unfamiliar function and sources for further reading.
Resources for teachers, including the program text, sample solutions to the exercises and a teachers' guide are available on these World Wide Web pages.
Next in preface