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 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. You have a total number of 4 attempts to fix your submission if necessary (so: 1st part submission - feedback - full lab submission - feedback - revised submission - feedback - final submission - no feedback before the course is over). If there are still issues left after your final submission, your submission will be rejected. So please read feedback carefully! Of course, you are allowed to ask questions if issues are unclear.
  3. The assignments will be graded on a scale of 3 to 5 and will count towards your final grade on the course.
  4. Your last attempt has to be submitted before the final deadline. If you fail to do this, your submission will be rejected.
  5. Cheating is taken very seriously. Before you start working on the assignments, please read the note on cheating.


Assignment 1 - part 1     Jan 26     (Wed Week 2)
Assignment 1 - part 2     Feb 2     (Wed Week 3)
Assignment 2 - part 1     Feb 9     (Wed Week 4)
Assignment 2 - part 2     Feb 23     (Wed Week 6)
Assignment 3 - part 1     Mar 2     (Wed Week 7)
Assignment 3 - part 2     Mar 9     (Wed Week 8)
Final Deadline     Mar 16     (Wed 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 can choose between a few different problems or, if you have an interesting idea, pick a problem of your own.

The project should take the form of a domain specific language for some interesting domain and an application of the language to a particular problem.