General Information

There are three programming assignments, which you should do in pairs. If you have a good reason for doing the assignments by yourself, please contact Dan, Anton or Patrik. You need to pass all three assignments in order to pass the course.

Each of the assignments is divided into two parts with separate deadlines.

The assignments have to be handed in using the Fire system.


Please read these early and carefully!
  1. Deadlines are hard. If you for some reason cannot make the deadline, contact us before the deadline, and tell us what your reason is, together with a realistic proposal of a new personal deadline for you. You may then get an extension of the deadline.
  2. The assignments will be graded on a scale of 3 to 5 and will count towards your final grade on the course.
  3. Your last attempt has to be submitted before the final deadline. If you fail to do this, your submission will be rejected.
  4. Cheating is taken very seriously. Before you start working on the assignments, please read the note on cheating.


Assignment 1 - part 1     Jan 28     (Wed Week 2)
Assignment 1 - part 2     Feb 4     (Wed Week 3)
Assignment 2 - part 1     Feb 11     (Wed Week 4)
Assignment 2 - part 2     Feb 25     (Wed Week 6)
Assignment 3 - part 1     Mar 1     (Sun Week 6)
Assignment 3 - part 2     Mar 15     (Sun Week 8)
Final Deadline     Mar 22     (Sun Exam week)

Assignment 1 - Turtle Graphics

Design and implement an embedded language for turtle graphics.


Assignment 2 - Replay Monad

Implement a monad which allows computations to be replayed, and implement a programming model for CGI programs on top of this monad.


Assignment 3 - Open project

The third assignment is a more open project where you read, understand, extend and evaluate an existing Haskell package.