Module and Programme Catalogue

Search site

Find information on

This module is not currently running in the selected year. The information shown below is for the academic year that the module was last running in, prior to the year selected.

2016/17 Taught Postgraduate Module Catalogue

COMP5941M Functional Programming

15 creditsClass Size: 30

Module manager: Prof David Duke

Taught: Semester 1 (Sep to Jan) View Timetable

Year running 2016/17

Pre-requisite qualifications

None, but students would benefit with familiarity with the following concepts from discrete mathematics / programming foundations: types, tuples, (mathematical) functions, recursion, induction.

This module is mutually exclusive with

COMP3941Functional Programming

This module is not approved as an Elective

Module summary

* foundations: the lambda calculus, redexes, evaluation order* basic concepts: functional abstractions and applications* simple and compound types* user-defined inductive data types and type classes* function definition* higher-order functions* higher-order types and Haskell type classes including Monad and Applicative* Haskell’s type system, and type inference* Haskell’s runtime architecture, including data representation and core* tools for Haskell development including modules and Cabal* tools for testing and techniques for performance tuning


This module examines the paradigm of programming with (pure) functions in software development, focussing on the Haskell language and its implementation technology. Similar concepts underpin other modern languages, including ML, Scala, JavaScript and Clojure. Indeed, concepts from functional programming are now found in C++. Functional programmers are in demand by industry: Haskell for example has been adopted by major companies (e.g. Facebook, and a number of banks) and is used by a range of specialist software developers in applications from web development to secure languages for programming embedded devices. In research, functional languages are the major laboratories for innovation in programming technologies including type theory, parallelism, software correctness, and security.

Learning outcomes
The module will:
* review the formal foundations of functional programming;
* equip students with an understanding of the major concepts in modern functional programming, including inductive data types, equational definitions, higher-order functions and higher-order types;
* introduce students to advanced features specific to the Haskell language, including the monad, applicative, and traversable type classes, and support for parallel programming;
* introduce components of the compiler and runtime architecture of Haskell, in particular the type system and type inference, internal representation of data, and “core” representation of code;
* explore performance profiling and methods for improving performance of functional programs;
* provide practical experience of software development in a pure functional language.

Skills outcomes
* rigorous use of software tools (repositories, testing, documentation)
* ability to profile and improve program performance
* professional software development


Students will understand the foundations of functional programming, and be able to write programs using basic to intermediate features of the Haskell language. The level of foundational knowledge will allow students to transfer insight into functional paradigm to programming in related languages. Students will obtain a deeper understanding of the principles of programming languages, in particular type theory, the role of run-time systems, implementation techniques for high-level languages, and performance considerations. They will also have further exposure to the tool ecosystem that is essential to software development practice.

Teaching methods

Due to COVID-19, teaching and assessment activities are being kept under review - see module enrolment pages for information

Delivery typeNumberLength hoursStudent hours
Class tests, exams and assessment11.0046.00
Private study hours64.00
Total Contact hours86.00
Total hours (100hr per 10 credits)150.00

Private study

For flipped classroom delivery, teaching weeks will consist of:
1. an initial practical class, augmented by 2 hours of preparatory reading and exercises;
2. lecture slots used to discuss and review new concepts
(one per week for six weeks, and two per week for four weeks, the additional slot
introducing more advanced material and concepts);
3. a further practical session to build on new knowledge, augmented by a further 5 hours of private work on directed study of specific advanced concepts, and follow-up problem sheets.

Opportunities for Formative Feedback

Weekly practical classes will provide rapid feedback on students’ ability to deploy the new concepts covered in that week. Although lectures will include presentation of some concept, a significant proportion of each “lecture” session will be critical discussion, again providing further insight into level of understanding. These sessions will also include short MCQs as formative assessment.

Methods of assessment

Due to COVID-19, teaching and assessment activities are being kept under review - see module enrolment pages for information

Assessment typeNotes% of formal assessment
AssignmentProgramming task20.00
AssignmentProgramming task30.00
Total percentage (Assessment Coursework)50.00

This module is re-assessed by Lab exam only.

Exam typeExam duration% of formal assessment
Unseen exam 3 hr 00 mins50.00
Total percentage (Assessment Exams)50.00

This module is re-assessed by Lab exam only.

Reading list

The reading list is available from the Library website

Last updated: 01/03/2017


Browse Other Catalogues

Errors, omissions, failed links etc should be notified to the Catalogue Team.PROD

© Copyright Leeds 2019