CS410 - Advanced Functional Programming
| TIMETABLE | TEACHING MATERIAL |
| Credits | 20 |
| Level | 4 |
| Semester | Semester 2 |
| Availability | No available as an elective |
| Prerequisites | CS316 - Functional Programming recommended |
| Learning Activities Breakdown | Lectures: 20 | Tutorials: 10 | Labs: 20 (indicative) |
| Items of Assessment | 2 |
| Assessment | 70% by final exam, 30% by coursework, consisting of regular programming exercises and a small individual project. |
| ILO Assessment Mapping | |
| Pedagogical Methods Used to Support Competency Development | |
| Resit | TBC |
| Lecturer | Vikraman Choudhury |
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.
Learning Outcomes
On completion of the class, a student should be able
- to understand the advantages of high-level programming languages;
- to understand the general principles and mathematical theory underlying functional programming languages;
- 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.
Syllabus
Understanding the mathematical structures arising in advanced functional programs including 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, induction principles, 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.
Parts of the class will be mediated in a dependently-typed programming language such as Agda, but other programming languages may also be explored. Advanced material may involve the type-theoretic and category-theoretic background to type class hierarchies, and the basics of dependently-typed programming and proving.
Recommended Reading
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.
/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./
As well as standard introductory textbooks, such as /Thompson's/ *“The Craft of Functional Programming”* and /Hutton's/ *“Programming in Haskell”*, more advanced and practical texts such as *“Real World Haskell”* by /Goerzen, O'Sullivan/, and /Stewart/ will prove valuable.
Relevant online resources include the /Haskell/ wikibook, *“Learn You a Haskell for Great Good!”* and weblogs such as *“A Neighborhood of Infinity”*. Some research papers, especially *‘Functional Pearls'*, may also make a contribution. Introductory /Agda/ textbooks such as *“Programming Language Foundations in Agda”*, and introductory textbooks on type theory such as *“Introduction to Homotopy Type Theory”* will also be relevant.
Last updated: 2026-08-07 11:03:45