Advanced Functional Programming teaches powerful language constructs, programming techniques, and exciting applications of Haskell. Functional languages represent the leading edge of programming language design, and the primary setting in which new programming concepts are introduced and studied. This module builds upon the introductory module G51FUN Functional Programming, by focussing on a number of more advanced topics in functional programming, including aspects of recent and current research. The precise topics covered will vary from year to year, but will include topics such as programming with effects, reasoning about programs, improving efficiency, infinite data structures, and functional pearls.
The best introduction to Haskell is the book by Graham Hutton, Programming in Haskell. You already used it in the first year module G51FUN. It is important that you reread it before starting G52AFP.
The new material, expecially about functors, applicatives, and monads, is delivered on the whiteboard during the lectures. You must take your own hand-written notes; these will be the main study resourse for you. I will provide some notes and some code on this page from time to time.
In this section you will find, after each lecture, a list of topics that were taught and sometimes links to lecture material.
Date | Topics | Material |
---|---|---|
1. 25 Jan 2016 | Introduction: What AFP is about Review of Haskell |
Introduction to AFP slides Haskell review slides |
2. 26 Jan 2016 | Review of Haskell: Functions, Lists, Recursion, Types |
Graham Hutton: Haskell Prelude |
3. 1 Feb 2016 | Sudoku: Game representation, valid grids |
Haskell code and comments |
4. 2 Feb 2016 | Sudoku: Simple solver, first improvement |
... |
5. 8 Feb 2016 | Sudoku: Advanced solvers |
... |
6. 9 Feb 2016 | Review of type classes Functors |
... |
7. 15 Feb 2016 | Instances of functors Maybe, Lists, Trees |
Monads and More Handout in Lecture |
8. 16 Feb 2016 | IO as a functor Functor Laws, Streams |
... |
9. 22 Feb 2016 | Applicative Functors Maybe, Lists, Trees are applicatives |
Examples of (Applicative) Functors |
10. 23 Feb 2016 | IO is applicative Applicative Laws |
... |
11. 29 Feb 2016 | Monads The bind and do notations |
... |
12. 1 Mar 2016 | The State Monad | ... |
13. 7 Mar 2016 | Review of the State Monad Relabeling Trees |
... |
14. 8 Mar 2016 | Relabeling Trees (cont.) Explanation of Coursework 2 |
... |
15. 18 April 2016 | Coursework 2: Imperative programs and stack machine code |
... |
16. 19 April 2016 | Coursework 2 bonus exercise: The Writer monad transformer |
... |
17. 25 April 2016 | Streams | ... |
18. 26 April 2016 | Streams (continuation) Exam topics |
... |
The coursework for the module comprises two extended programming exercises, and will be released here at the appropriate points during the module. Be sure to read carefully the regulations about plagiarism in the student handbook.
The first coursework will count for 10% of your final mark and the second coursework for 15%. Coursework is marked not only on its correctness, but also on efficiency and clarity of the code.
On the Moodle page there is a forum. You can use it to ask for feedback on any topic from the lectures and on the coursework.
Date | Deadline | Coursework | Topics |
---|---|---|---|
8 February | 8 March | Noughts and Crosses Initial Code |
Implementing games Game Trees |
8 March | 26 April | Monadic Compiler Initial Code |
The State MonadCompilers |
If you don't understand something or have any issues with the topics, don't be shy and ask. The first place to look for answers to questions about the module is the AFP forum on Moodle.
I will have office hours on Monday from 4 to 5 PM and Tuesday from 10 to 11 AM. My office is B83 in the Computer Science Building. You can come and ask any question about the material explained in the lectures.
You can contact me by e-mail: put G52AFP in the subject line, so I know immediately that it is about this module.