CSci 555: Functional Programming
Spring Semester 2019

H. Conrad Cunningham

Professor of Computer and Information Science
School of Engineering
University of Mississippi

Course Development

Position in Curricula

The course CSci 555, Functional Programming, satisfies the requirements for a programming intensive course in the MS and PhD programs in computer science. It can also be used an elective in the undergraduate BSCS and BA curricula.

History

I created CSci 555 at the University of Mississippi and first taught it during the Spring 1991 semester.

I adopted the first edition of Bird and Wadler [Bird 1988] as the initial textbook for the course. I thank Richard Bird and Philip Wadler for writing this excellent textbook. I thank Jeremy Gibbons for suggesting that book in a response to an inquiry I posted to a Usenet news group in Summer 1990.

I also used Wentworth’s RUFL (Rhodes University Functional Language) interpreter and his tutorial [Wentworth 1990] in the first two offerings of the course. I thank Peter Wentworth for sending me (unsolicited, in response to my Usenet post) his interpreter and tutorial on a floppy disk through snail mail from the then-sanctioned South Africa.

My approach was also shaped by my research on formal methods and my previous teaching on that topic. I created the course Program Semantics and Derivation (CSci 550) and first taught it in Spring 1990. I followed that with the course Theory of Concurrent Programming (Engr 664), which I first taught in Fall 1990 . I thank my dissertation advisor Gruia-Catalin Roman for developing my interests in formal methods, Jan Tijmen Udding for teaching a graduate course on program derivation that piqued my interests, and the other researchers or authors who have influenced my thinking: Edsger Dijkstra, Tony Hoare, David Gries, Mani Chandy, Jayadev Misra, Edward Cohen, and many others.

I subsequently taught the Functional Programming course during the Spring 1992, Fall 1993, Fall 1994, Fall 1995, Spring 1997, Fall 1998, Spring 2000, and Spring 2003 semesters. Dr. Kathy Gates, a former student in the course, taught the course in the fall 2004 semester during my sabbatical. I also taught the course during the Spring 2007, Fall 2010, Spring 2016, and Spring 2019 semesters.

For the third offering of CSci 555 in Fall 1993, I switched the course to use the Gofer interpreter for the Haskell language. I thank the international committee of researchers, including Simon Peyton Jones, Paul Hudak, Philip Wadler, and others, who have developed and sustained Haskell since the late 1980s. I also thank Mark Jones for developing the lightweight Gofer interpreter and making it and its successor HUGS widely available.

Because of the need for a tutorial like Wentworth’s and an unexpected delay in getting copies of the Bird and Wadler textbook [Bird 1988] from Prentice Hall that semester, I began writing, on an emergency basis, what evolved into my Notes on Functional Programming with Haskell [Cunningham 2014].

Some parts of the Notes were based on my handwritten class notes from the the 1991 and 1992 offerings of the course. Many pages of the Notes were written “just-in-time” in late-night sessions before I taught them the next day. I thank Prentice Hall (now Pearson) for its delay in shipping books across the “big pond”, my wife Diana Cunningham for tolerating my disruptive schedule, and my Fall 1993 students for not complaining too vigorously about a quite raw set of class notes.

I continued to develop the Notes for the Fall 1994 and Fall 1995 offerings of the course. In early 1996, I created a relatively stable version of the Notes that I continued to use in subsequent offerings of CSci 555. I thank my students and others who pointed out typos and suggested improvements during the 1993-1996 period.

I thank David Gries for encouraging me to expand the Notes into a textbook. I am doing that, albeit over 20 years later than Gries intended.

For the Spring 1997 offering of CSci 555, I started using the new HUGS interpreter (which replaced Gofer) and the 1st edition of Thompson’s textbook [Thompson 1996] (now it its 3rd edition). I thank Simon Thompson for writing his excellent, comprehensive introductory textbook on Haskell programming and Mark Jones for developing HUGS.

Over the next 17 years, I corrected a few errors but otherwise the Notes were stable. However, I did create supplementary notes for CSci 555 and related courses. These drew on the works of Abelson and Sussman [Abelson 1996], Thompson [Thompson 1996], Parnas [Parnas 1972] [Britton 1981], and others.

In Fall 2014, I taught CSci 450 (Organization of Programming Languages) using Haskell and used about half of the Haskell functional programming notes. I revised the Haskell Notes to use Haskell 2010 and the GHC compiler.

In Summer 2016, I began developing the Haskell-based textbook now titled Exploring Languages with Interpreters and Functional Programming (ELIFP) [Cunningham 2018] for CSci 450. This textbook absorbed most of the Haskell material (although not all is used in 450) and expanded it to include more discussion of programming paradigms, software testing, modularity, language processing, and interpreters. I first used ELIFP in CSci 450 in Fall 2017.

As a result of using Haskell in the Fall 2014 offering of CSci 450, I revised the Spring 2016 offering of CSci 555 to use Scala instead of Haskell. I chose the “red book” [Chiusano 2015]] as the textbook.

In Spring 2017, I used CSci 556 (Multiparadigm Programming) to revisit the functional programming language Haskell and explore some additional areas in preparation for using Haskell in the fall 2017 offering of CSci 450. In particular, I used that opportunity to continue the work on the ELIFP textbook.

For the Spring 2017 offering of CSci 555, I am again using Scala, but I do not plan to use the “red book”.

References

[Abelson 1996]:
Harold Abelson and Gerald Jay Sussman. Structure and Interpretation of Computer Programs (SICP), Second Edition, MIT Press, 1996.
[Bird 1988]:
Richard Bird and Philip Wadler. Introduction to Functional Programming, First Edition, Prentice Hall, 1988.
[Britton 1981]:
K. H. Britton, R. A. Parker, and D. L. Parnas. A Procedure for Designing Abstract Interfaces for Device Interface Modules, In Proceedings of the 5th International Conference on Software Engineering, pp. 195-204, March 1981. Ltd, 2015.
[Chiusano 2015]]:
Paul Chiusano and Runar Bjarnason, Functional Programming in Scala, Manning, 2015.
[Cunningham 2014]:
H. Conrad Cunningham. Notes on Functional Programming with Haskell, 1993-2014.
[Cunningham 2018]:
H. Conrad Cunningham. Exploring Languages with Interpreters and Functional Programming (ELIFP), 2016-2018.
[Parnas 1972]:
D. L. Parnas. “On the Criteria to Be Used in Decomposing Systems into Modules,” Communications of the ACM, Vol. 15, No. 12, pp.1053-1058, 1972.
[Thompson 1996]:
Simon Thompson. Haskell: The Craft of Programming, First Edition, Addison Wesley, 1996; Second Edition, 1999; Third Edition, Pearson, 2011.
[Wentworth 1990]:
E. P. Wentworth. Introduction to Functional Programming using RUFL, Department of Computer Science, Rhodes University, Grahamstown, South Africa, August 1990.

Copyright (C) 2020, H. Conrad Cunningham
Format updated 15 August 2020