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