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