School of Computer Science

Module 06-25344 (2018)

Functional Programming

Level 2/I

Dan Ghica Semester 1 10 credits
Co-ordinator: Dan Ghica
Reviewer: Martin Escardo

The Module Description is a strict subset of this Syllabus Page.


This module will develop practical programming skills in a modern functional programming language. It will strengthen the algorithmic and design skills of the students, within the functional framework, and will introduce them to some advanced programming language features.


The aims of this module are to:

  • present the basic ideas of functional programming languages
  • demonstrate the main elements of good programming style
  • illustrate some of the uses and applications of functional programming

Learning Outcomes

On successful completion of this module, the student should be able to:

  1. demonstrate practical understanding of a wide range of recursive types
  2. demonstrate practical understanding of infinite data structures
  3. demonstrate practical understanding of lazy programming
  4. understand, manage and use effects
  5. understand and use higher-order functions
  6. demonstrate awareness of type system and modules



Teaching methods

Eleven two-hour weekly lectures plus eleven two-hour demonstrator-supervised laboratory sessions.

Contact Hours: 45 (22 hrs lectures, 22 hrs labs, 1 revision lecture)


Sessional: 50% Continuous Assessment and 50% Examination (CT) (The continuous assessment and exam will be internal hurdles, students must pass both in order to pass the module).

Supplementary (where allowed): By examination only (100%).

Detailed Syllabus

  1. Introduction: aims of the module; structure and organisation of the module; assessment; teaching methods; style of presentation; useful books.
  2. Functional language paradigm: uses; implementation; history; main features; advantages and disadvantages; languages (e.g., Lisp, ML, OCAML, Haskell);
  3. Fundamental ideas (higher-order functions, currying, uncurrying, function composition, recursion, local definitions); programming style; literate scripts; type systems.
  4. Numbers: basic operations, basic numerical types, numerical type classes.
  5. Lists: basic operations.
  6. Advanced features: e.g., modules; monads; interactive programs; lazy evaluation; proving properties possessed by programs.

Programmes containing this module