Please note: there may be some adjustments to the teaching arrangements published in the course catalogue for 2020-21. Given current circumstances related to the Covid-19 pandemic it is anticipated that some usual arrangements for teaching on campus will be modified to ensure the safety and wellbeing of students and staff on campus; further adjustments may also be necessary, or beneficial, during the course of the academic year as national requirements relating to management of the pandemic are revised.

Functional Programming (H) COMPSCI4021

  • Academic Session: 2022-23
  • School: School of Computing Science
  • Credits: 10
  • Level: Level 4 (SCQF level 10)
  • Typically Offered: Semester 1
  • Available to Visiting Students: Yes
  • Available to Erasmus Students: Yes

Short Description

Functional programming is introduced using Haskell. The standard programming techniques, as well as some advanced topics, are covered and applied to realistic programming problems.


4 hours per week, blended offering of face-to-face and online activities

Requirements of Entry


Excluded Courses





Examination 60%, Set Exercises 40%.

Main Assessment In: April/May

Are reassessment opportunities available for all summative assessments? No

Reassessments are normally available for all courses, except those which contribute to the Honours classification. For non Honours courses, students are offered reassessment in all or any of the components of assessment if the satisfactory (threshold) grade for the overall course is not achieved at the first attempt. This is normally grade D3 for undergraduate students and grade C3 for postgraduate students. Exceptionally it may not be possible to offer reassessment of some coursework items, in which case the mark achieved at the first attempt will be counted towards the final course grade. Any such exceptions for this course are described below. 


Resit examinations ARE NOT ALLOWED for Honours students.

Resit examinations ARE ALLOWED for Masters students.


The coursework cannot be redone because it is impossible to generate an equivalent piece of coursework which replicates the original one because of the follow-up work which was done subsequent to the original submission. Feedback provided to the students after the original coursework would give any student redoing coursework an unfair advantage.

Course Aims

Functional programming languages are one of the central focuses of modern research in programming languages, and they are also of immense practical utility. This course presents the concepts of functional programming using Haskell, which is one of the most widely used functional languages. The emphasis is on developing practical programming skills, applying advanced techniques such as monads, parallelism, metaprogramming, and formal methods.

The aims are to understand the principles of functional programming, including functions, expressions, types, type inference, equational reasoning, and monads, and to develop the ability to solve substantial programming problems using Haskell.

Intended Learning Outcomes of Course

By the end of the course students will be able to:

1. Write simple programs involving elementary Haskell techniques, including pure function definitions;

2. Use standard combinators for operating on lists;

3. Define new algebraic data types and use recursion to define functions that traverse recursive types;

4. Demonstrate understanding of how to express data structures and function interfaces using types, and how to infer types;

5. Demonstrate understanding of how to structure programs using monads, how to use the most common standard monads (including IO, Maybe, and State), and how to use a monad transformer;

6. Develop substantial software applications including GUIs and system interaction;

7. Use formal methods to prove properties of functional programs;

8. Construct, adapt, and analyse code using standard Haskell platform tools. 

Minimum Requirement for Award of Credits

Students must submit at least 75% by weight of the components (including examinations) of the course's summative assessment.