|Prerequisites||CS316 Functional Programming|
|Availability||Semesters 1 and 2|
|Contact||Lectures: 22 | Tutorials: 11 | Labs: 22
Assignments: 65 | Self study: 80
|Assessment||100% by coursework, consisting of regular programming exercises and a small individual project, building a portfolio of work for assessment.|
|Lecturer||Dr Conor McBride|
Aims and Objectives
To provide the student with further skills in functional programming and an appreciation of the mathematical structures which underpin powerful general programming concepts and techniques.
On completion of the class, a student should be able
- to understand the advantages of high-level programming languages;
- to understand the advantages of using mathematics to structure programming;
- to understand the principles of functional program design and demonstrate their practical application;
- to design and implement significant software systems, e.g. those arising in fourth year projects.
Understanding the mathematical structures arising in advanced functional programs as mediated by the following concepts: type classes and constructor classes, monoids, functors, applicative functors, monads and monad transformers, arrows, comonads, inductive and coinductive types, recursion patterns including folds and unfolds, continuations, and generalised algebraic data types.
Using these concepts to achieve the following features of code: abstraction, code reuse, type guarantees of validity and safety, data structures equipped with mathematical structure.
Applying the ideas learned in the course to specific programming problems, possibly including the following: interactive processes, input/output, environment handling and modular interpreters, zippers, parsers, type checkers, graphical user interfaces, and transaction processing.
For the most part, the class will be mediated in Haskell, but other functional programming languages may be explored. Advanced material may involve the categorical background to the functor class hierarchy, or the basics of functional programming with dependent types.
* This list is indicative only – the class lecturer may recommend alternative reading material. Please do not purchase any of the reading material listed below until you have confirmed with the class lecturer that it will be used for this class.