COMP20330 Functional Programming II

Academic Year 2023/2024

This module builds on the stage 1 Functional Programming module COMP10300. Where that module focused mainly on recursion and covered some basic functional ideas (functions as arguments, map and filter, introduction to closures) in the language Scheme, this second Functional Programming module will teach 'Pure' Functional programming in the language Haskell, focusing on the use of static types and type structures, pattern matching, list comprehensions, lazy evaluation, infinite data structures and related topics.

This module will also teach approaches to the "broader problem" of programming: producing problem descriptions that allow algorithmic solutions, verifying the correctness of solutions, and identifying problems at the levels of code, algorithm, and problem statement. These topics will be taught using generative 'AI' assistants such as chatGPT or Copilot: using these tools to generate code requires the programmer to to focus on these "broader problem" questions in depth.

Show/hide contentOpenClose All

Curricular information is subject to change

Learning Outcomes:

On completing this module students will be able to take a vague problem statement and produce working Haskell code that solves that problem in a way that that they can show (informally) is correct. They will be able to design and implement appropriate type structures, implement recursive problem solutions, and use list comprehensions and infinite data structures in Haskell. They will also be able to use generative assistants to produce Haskell code that solves more challenging problems in a demonstrably correct and efficient manner, and show a principled awareness of how to use these tools effectively.

Indicative Module Content:

1: What is 'pure' functional programming? Why is purity important?
2: Introduction to Haskell: recursive definitions
3: Introduction to generative programming assistants
4: Using types in Haskell
5: Producing effective problem statements for programming assistants
6: Introduction to list comprehensions in Haskell
7: Problem statements that generate different solutions
8: Defining types in Haskell
9: Problem statements that generate different type definitions
10: Types and program correctness
11: Verifying and assessing generated solutions to problems

Student Effort Hours: 
Student Effort Type Hours
Lectures

24

Computer Aided Lab

24

Specified Learning Activities

20

Autonomous Student Learning

50

Total

118

Approaches to Teaching and Learning:
task-based learning; peer work; lectures; lab work; enquiry & problem-based learning 
Requirements, Exclusions and Recommendations

Not applicable to this module.


Module Requisites and Incompatibles
Pre-requisite:
COMP10300 - Functional Programming


 
Assessment Strategy  
Description Timing Open Book Exam Component Scale Must Pass Component % of Final Grade
Practical Examination: Two-hour practical programming exam covering the Functional Programming topics presented in the module. Week 12 n/a Graded No

70

Continuous Assessment: 2 hour programming labs on different Functional Programming exercises, which must be completed within the lab. Throughout the Trimester n/a Graded No

30


Carry forward of passed components
Yes
 
Remediation Type Remediation Timing
In-Module Resit Prior to relevant Programme Exam Board
Please see Student Jargon Buster for more information about remediation types and timing. 
Feedback Strategy/Strategies

• Feedback individually to students, post-assessment
• Online automated feedback

How will my Feedback be Delivered?

Students will get automated online feedback on their assignments throughout the semester. For the practical exam they will get individual feedback and assessment.

Timetabling information is displayed only for guidance purposes, relates to the current Academic Year only and is subject to change.
 
Spring
     
Lecture Offering 1 Week(s) - 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33 Thurs 09:00 - 09:50
Practical Offering 1 Week(s) - 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33 Thurs 15:00 - 16:50
Lecture Offering 1 Week(s) - 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33 Wed 09:00 - 09:50
Spring