This module introduces students to the functional programming paradigm, using at least one modern functional programming language to put the core concepts into practice. The module will develop both the foundation and theory of this paradigm, as well as the practice and application of the paradigm to solve problems and build systems. The module will core topics, including:
• Functions as first-class language constructs and as a central organising principle;
• Higher-order functions and compositional programming;
• Basic semantics of functional languages;
• The role of types in programming;
• Algebraic data types and pattern matching;
• Recursion and recursive data types;
• Differences with imperative and object-oriented programming paradigms;
• Properties of programs, (e.g., purity, side-effect freedom, totality, and partiality).
• The lambda-calculus as a programming model and foundation.
• BNF grammars for representing context-free syntax, and its relation to ADTs and language manipulation.
• Testing and issues of building correct software.
The module will develop practical skills in programming and problem solving using functional programming. There will also be a chance to apply functional programming to help understand better concepts in logic and mathematics.
Later parts of the module will then consider concurrent programming in the context of functional programming, including concurrent programming models and primitives (e.g., message-passing concurrency), parallelism, synchronisation and communication, and properties of deadlock, communication-safety, and starvation.
Total contact hours: 33
Private study hours: 117
Total study hours: 150
Method of assessment
Main assessment methods:
In-class test 1 – 10%
Functional Programming assessment – 15%
In-class test 2 – 10%
Concurrent Programming assessment – 15%
2 hour - Examination – 50%
Like for like.
"Programming in Haskell" (2nd edition), Graham Hutton, 2016.
"The Haskell Road to Logic, Maths, and Programming" Kees Doets, Jan van Eijck, 2004.
“Real World Haskell: Code You Can Believe In” Bryan O'Sullivan et al, O'Reilly Media, 2008.
“Erlang Programming”, Francesco Cesarini and Simon Thompson, O'Reilly Media, 2009.
“Programming Erlang: Software for a Concurrent World”, Joe Armstrong, Pragmatic Bookshelf, 2007.
See the library reading list for this module (Canterbury)
The intended subject specific learning outcomes.
On successfully completing the module students will:
1. Have an understanding of the core concepts of functional programming: functions as the central organising principle, functions as values, side-effect free programming, evaluation via rewriting.
2. Be able to understand and use recursion, recursive data structures (e.g., lists, trees, mutually recursive data types), and higher-order functions to solve problems.
3. Be able to implement functional programs to solve problems using appropriate idioms in a modern functional programming language, including understanding the languages main idioms and basic libraries.
4. Understand the structure of a functional program from the perspective of its types, including creating their own data structures to solve problems.
5. Understand the basic theory of the lambda-calculus and its relation to modern mainstream programming languages. Understand how to read context-free descriptions of language syntax e.g. for the lambda calculus.
6. Have an understanding of the concepts of concurrent programming from a functional perspective: processes, independence, communication, and synchronisation.
7. Understand program properties exposed by function and concurrent programming: partiality, totality, side-effect freedom, non-termination, determinism, deadlock, and starvation.
Back to top
Credit level 5. Intermediate level module usually taken in Stage 2 of an undergraduate degree.
- ECTS credits are recognised throughout the EU and allow you to transfer credit easily from one university to another.
- The named convenor is the convenor for the current academic session.
University of Kent makes every effort to ensure that module information is accurate for the relevant academic session and to provide educational services as described. However, courses, services and other matters may be subject to change. Please read our full disclaimer.