Session 1, 2004
To provide students with an understanding of the theory and practise of
the design, use, and implementation of functional programming languages,
such as Haskell, Scheme, and Standard ML. This includes selected topics
from the following areas:
- Foundations: lambda calculus, semantics, and type systems.
- Design: side-effects, exceptions, concurrency, and parallelism.
- Implementation: abstract machines, program transformation, and memory
- Programming techniques: combinator libraries, monads,
generic programming, and meta programming.
- Applications: domain specific languages, graphics, web
programming, reactive systems, and scientific programming.
Students are to gain an understanding of the conceptual basis of
functional programming as well as practical experience in the
use of functional programming in a variety of application areas.
Students are expected to be competent in the use of at least one
functional programming language, preferably Haskell. For practical
reasons, Haskell will be the language of choice for most of the course,
and especially, for the assignments. All students are expected to
aquire the required level of Haskell programming on their own.
- COMP3131 or
- For P/G students, the permission of the lecturer is required.
The course is taught in a seminar format, that is, in addition
to lectures by the lecturer, each student will have to give a
presentation about a selected topic in front of the class. A
detailed schedule will be drawn after all students have chosen a
topic in Week 1. The lecture in Week 1 encompasses the usual
course introduction, a topic overview, topic selection by
students, and a review of the central features and benefits of
The first six weeks of lectures will be delivered by the
lecturer and will cover basic material that serves as a
foundation for understanding more advanced topics. Later weeks
will mainly consist of student presentations plus discussions
about the presented material. The following is a preliminary
schedule for the course [updated 22 March 4]:
||Intro, Topics & Essential Features of FP
||Imperative Functional Programming (I/O)
||Imperative Functional Programming (Concurrency, Exceptions &
||Compilation of Functional Languages
||Guest lecture: Roman Leshchinskiy (Generic Programming with Morphisms)
||Type Systems & How to Give a Presentation
||Guest lecture: Patryk Zadarnowsky (SSA and Functional Intermediate Languages)
||No Lecture (Anzac Day)
||Optimising Purely Functional Array Programs
Each student will have to complete a programming assignment that stands
in relation to his or her topic. Assignment submissions are broken down
into three milestones:
- Milestone 1 [Week 5; 10 marks]: Functional
specification of software to be developed (e.g., in the case of a
library, the documented library interface needs to be provided).
- Milestone 2 [Week 9; 15 marks]: Basic functionality
must be supported.
- Milestone 3 [Week 13; 15 marks]: Full functionality
must be supported.
Overall, 40 marks can be scored on the assignment. The penalty for
late submission of a milestone will be a 4%
reduction of the maximum possible mark (for this milestone) per
day of being late. No milestone will be accepted later than
one week after the
There will be a two hour written examination. Please make up your
mind of whether you are sick on the examination day
before the examination begins. Supplementary
examination will only be granted when a student was sick on the
examination day (or could not attend for reasons beyond the student's
control), has not attended the examination, and submits a
special consideration at the Student Centre within three days after the
The final mark is determined by the sum of the following three
- Seminar presentation: 20 marks
- Assignment: 40 marks
- Final examination: 40 marks
References will be provided as part of the topic list. There is no set
textbook. For students who wish to consult an introductory textbook on
functional programming to revise their FP background, I recommend the
For further reading, refer to the recommended reading list.