Syllabuses - UG

CS410 - Advanced Functional Programming

TIMETABLETEACHING MATERIAL
Credits20
Level4
SemesterSemester 2
Availability

No available as an elective

Prerequisites

CS316 - Functional Programming recommended

Learning Activities Breakdown

Lectures: 20 | Tutorials: 10 | Labs: 20
Assignments: 65 | Self study: 85

(indicative)

Items of Assessment2
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

LecturerVikraman 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