| Module Code | CSU44012 | 
| Module Name | Topics in Functional Programming | 
| ECTS Weighting [1] | 5 ECTS | 
| Semester Taught | Semester 1 | 
| Module Coordinator/s | Glenn Strong | 
Module Learning Outcomes
On successful completion of this module, students will be able to:
- Develop sophisticated programs in a high level functional language;
- Critique software designs in terms of functional concepts;
- Contrast the functional style as it is used in several languages;
- Design programs using purely functional paradigms.
Module Content
Course content covers both techniques and technologies.
Topics will include:
- Designing programs with higher-order functions (functors and monad transformers);
- Domain Specific Languages in functional programming Monads and Arrows for programming;
- Type systems for functional languages; basics of type inference;
- Generalized Abstract Data Types; introduction to dependent types;
- I/O and State handling;
- Functional debugging;
- Efficiency considerations;
- Functional programming for web and concurrent systems.
Teaching and Learning Methods
Teaching is via lectures and in-class presentations and discussion, and online delivery of content through Blackboard.
Assessment Details
Students must submit a meaningful attempt at at least one programming project, four weekly exercises, and one in-class quiz.
| Assessment Component | Brief Description | Learning Outcomes Addressed | % of Total | Week Set | Week Due | 
| Programming Projects | Two programming projects at the mid point and near the end of term. | LO1, LO4 | 60% | Week 4, 8 | Week 6, 12 | 
| Reading | Written reviews of selected material from the research literature. | LO2, LO3 | 10% | Week 2 | Week 12 | 
| Quiz | Online quizzes assessing theory knowledge. | LO1, LO2 | 20% | Week 8-12 | Week 8-12 | 
| Weekly Exercises | Small weekly exercises connected to the lectures. | LO1, LO2, LO3, LO4 | 10% | Week 1-12 | Week 1-12 | 
Reassessment Details
Project (100%).
Contact Hours and Indicative Student Workload
| Contact Hours (scheduled hours per student over full module), broken down by: | 33 hours | 
| Lecture | 33 hours | 
| Laboratory | 0 hours | 
| Tutorial or seminar | 0 hours | 
| Other | 0 hours | 
| Independent Study (outside scheduled contact hours), broken down by: | 92 hours | 
| Preparation for classes and review of material (including preparation for examination, if applicable) | 33 hours | 
| Completion of assessments (including examination, if applicable) | 59 hours | 
| Total Hours | 125 hours | 
Recommended Reading List
List of research literature and recommended texts are circulated on Blackboard in Week 1.
Module Pre-requisites
Prerequisite modules: CSU34016
Other/alternative non-module prerequisites: A reasonable grounding in the programming language Haskell (experience with similar languages such as ML) is required.
Module Co-requisites
N/A
Module Website
Link to class for first week (for students who may wish to switch to this module):
Week 1:
- Tuesday 14th September 2021. Welcome lecture (Blackboard Collaborate link)
