Course Description

Course Name

Functional Programming

Session: VGSS3122

Hours & Credits

10 SCQF Credits

Prerequisites & Language Level

Taught In English

  • There is no language prerequisite for courses at this language level.

Overview

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.

Requirements of Entry

Advanced Programming 3 (or equivalent), Programming Languages 3 (or equivalent).

Assessment

Written feedback on assessed exercises. Exam 80% and coursework 20%.
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.
Main Assessment In: April/May

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, using 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: Implement a package using cabal, and use the hackage database.

*Course content subject to change