CSU34016 – Introduction to Functional Programming

Module CodeCSU34016
Module Name Introduction to Functional Programming
ECTS Weighting [1]5 ECTS
Semester TaughtSemester 1
Module Coordinator/s  Dr Andrew Butterfield

Module Learning Outcomes

On successful completion of this module, students will be able to:

  1. Develop programs in a high level functional language;
  2. Analyse and structure programs using Strong Typing;
  3. Demonstrate the use of higher-order programming inherent in functional languages;
  4. Use logical proof techniques to reason about functional programs;
  5. Use appropriate software development tools.

Module Content

Functional programming languages present a powerful, abstract, and important direction in programming languages. The high level of abstraction and the expressive syntax makes program decomposition and composition unusually easy, while the close connections to the underlying semantics make formal reasoning tractable. Systems such as Google’s “Map/Reduce” framework demonstrate the influence of this approach, and the importance to a computer scientist of understanding it.

This modules uses the functional programming language called “Haskell” to introduce key concepts such as how to compute using functions, and how these languages can easily support powerful features such as pattern-matching, recursion, strong typing, type polymorphism, higher-order functions, laziness, and type classes. Practical exercises are based around the use of software development tools (Haskell “stack”) that support test automation. We also study the theoretical and formal underpinnings of such languages (lambda calculus), and how much easier it is to do formal reasoning regarding program properties using logical proofs.

Teaching and Learning Methods

The course is delivered through a mix of (live in-person, recorded) lectures and (live in-person, recorded) tutorials, with regular short graded exercises being given to assess learning outcomes. There are no formal laboratory slots, and any instruction on how to setup and use tools will be done in online lectures and reinforced in tutorial sessions. Most exercises will be have some controlled degree of randomisation.

Assessment Details

Assessment ComponentBrief Description Learning Outcomes Addressed% of TotalWeek SetWeek Due
Exercise 1Tool Setup/UsageLO1, LO510%Week 1Week 3
Exercise 2Basic FP ProgrammingLO1, LO2, LO520%Week 2Week 4
Exercise 3Symbolic ProgrammingLO1, LO2, LO520%Week 5Week 7
Exercise 4Program ReasoningLO1, LO4, LO525%Week 8Week 11
Exercise 5Higher-Order ProgrammingLO1, LO3, LO525%Week 11Week 14

Reassessment Details

Reassessment Exercise (100%).

Contact Hours and Indicative Student Workload

Contact Hours (scheduled hours per student over full module), broken down by: 31 hours
Lecture (online)22 hours (*)
Laboratory0 hours
Seminar (face-to-face, CV19 restrictions permitting, online otherwise)9 hours (*)
Other0 hours
Independent Study (outside scheduled contact hours), broken down by:72 hours
Preparation for classes and review of material (including preparation for examination, if applicable)36 hours
Completion of assessments (including examination, if applicable)36 hours
Total Hours103 hours

Recommended Reading List

Module Pre-requisites

Prerequisite modules: N/A

Other/alternative non-module prerequisites: Familiarity with a main-stream (imperative) programming language, such as Java, C, python, or similar, and some experience in programming with that language. No prior experience with functional programming languages such as Haskell, ML, OCaml, Scheme, LISP, etc., is required.

Module Co-requisites

N/A

Module Website

Blackboard

Guest Links for Online Lectures: