Informatics 1: Functional Programming


This is a taught course in the School of Informatics suitable for first-year undergraduate students (SCQF level 8). The course teaches the basics of functional programming using the language Haskell. The main goal is to acquaint the student with fundamental programming concepts such as recursion, abstraction, higher-order functions and data types, whilst at the same time emphasizing the practical use of such constructs by applying them within a graphical environment. For further details see the course catalogue entry.

Informatics 1: Functional Programming is part of Informatics 1, the first-year programme for all undergraduate degrees in the School of Informatics. During semester 1, students should also be taking Informatics 1: Computation & Logic.

Lectures · Exercises · Tutorials · Revision Tutorials · Advanced Tutorials · Labs
Videos · Online · Books · Haskell · Exams · Feedback · Contact · Competition

Slides and reading: Here are the slides and code examples for each lecture. The pages in the two course textbooks that correspond to each lecture are indicated.

Week Subject Slides (code) Reading in Thompson / Lipovača
1. Introduction. Functions. Lists.
(Extra FP lecture on Thursday)
lect01.pdf (Land of Lisp music video,, lect03.pdf ( Sects. 1.2-11,1.14; 2.1,2.3,2.4,2.7; 3.2-3,3.7; 5.5,5.6 /
pp. xv-26 except 13-14,18-22
2. Lists and Recursion lect04.pdf (, lect05.pdf Sects. 3.1,3.4-5; 4.1,4.5; 5.2; 6.2; 7.1-4 /
pp. 18-22,35-42,51-53
3. Map, filter, fold lect06.pdf ( lect07.pdf ( Sects. 4.2,4.7; 7.5; 10.1-4; 11.4; 17.1-2,17.6 /
pp. 13-14,42-45,53-71,73-78
4. Lambda, sections lect08.pdf Sects. 4.3; 5.1,5.3; 11.1-3 /
pp. 59-63,71-73,80-85,109-113,127-130
5. Algebraic data types lect09.pdf ( Catch up on your reading!
6. (No FP lecture on Monday)
CLASS TEST on Tuesday
Revise for Class Test
7. Algebraic data types lect10.pdf ( Sects. 14.2-4 /
pp. 96-97,117-119,121-122,130-135
8. Abstract types lect11.pdf ( Sects. 15.1,15.2; 16.1,16.2,16.4,16.7,16.8 /
pp. 87-89,104-107,113-114,135-137
9. Type classes lect13.pdf ( Sects. 13.1-5; 14.6 / pp. 27-33,122-127,138-140,141-143
10. MOCK EXAM; IO and monads; logic and programs
(Extra FP lectures on Thu / Fri)
lect15.pdf ("Haskell is useless" video,
lect17.pdf, lect18.pdf
Sects. 8.3-5; 18.4-5; 9.1,9.2,9.5 /
pp. 153-162,272-278,280-287,292-296; these slides
11. (No FP lectures on Mon / Tue)
Programming competition presentation on Friday
Catch up on your reading!

CamlBack survey

If you used the CamlBack automated feedback system, please send feedback to its creators about your experiences and suggestions by filling out this simple 1-page questionnaire. Thank you!

Lectures: 14.10–15.00 Mondays (David Hume Tower, Lecture Theatre A) and 11.10–12.00 Tuesdays (Appleton Tower, Lecture Theatre 5) during Semester 1. You are very strongly advised to attend all lectures.

Link: Lecture locations.

Exercises: Tutorial exercises are published here at least a week before the corresponding tutorial. This work does not contribute towards your mark for the course but it is absolutely essential for your understanding of the material.

You can discuss your work on these exercises with other students. If you are having difficulties, drop in to the lab when a demonstrator is on duty. Or go to InfBase, the Informatics student help desk.

This year we will be experimenting with the CamlBack system hosted at UCLA which provides automated feedback on tutorial exercises. This is meant to help you make progress on the exercises before your tutorial and is not a substitute for tutorial attendance. CamlBack is still under development and for some kinds of exercises the feedback will be more helpful than for others.

Link: CamlBack (select language Haskell and login as guest); notes on CamlBack.

Tutorials: These start in week 3 and take place each week until the end of semester, except for week 10. If you are ill or otherwise unable to attend one week then email your tutor, and if possible attend another tutorial group in the same week.

Link: Tutorial group times, places and membership.

If you wish to move to a different tutorial group, please ask the ITO through their online contact form and explain your constraints. Or visit them on level 4 of Appleton Tower.

Students are expected to prepare for each tutorial, which includes completing the tutorial exercises and the reading.

You must attempt the work before the tutorial and bring with you a copy of the work you have done. Tutorials are mandatory, and the only way to learn is to do the work before the tutorial, not at the tutorial. Students who have not done the work in advance will be sent away.

Revision Tutorials: There will be extra drop-in tutorials starting in week 4 for students who find that they require extra help, and continuing up until the week before the exam. This is in addition to and separate from your normal tutorial session and tutorial exercises!

  • Wednesday 2-3pm, Computer Lab West (AT5.05)
  • Extra revision tutorial: Friday 12 December, 2-3pm, Computer Lab West (AT5.05)

If you decide to attend, then to get the most out of the session you should attempt the exercises before the tutorial and bring your solutions with you!

Advanced Tutorials: There will also be extra drop-in tutorials starting in week 4 for students who would like to go beyond what will be covered in the normal tutorials. This tutorial is for you if you had no significant trouble solving the non-optional exercises and have made a serious attack on at least the first of the optional exercises. Again, this is in addition to and separate from your normal tutorial session and tutorial exercises!

  • Friday 4-5pm, AT4.12

If you decide to attend, then you should bring your solutions to the tutorial exercise with you!

Labs: Computer Lab West (CLW) in Appleton Tower room 5.05 is reserved for Inf1-FP for a few hours every weekday. A lab demonstrator will be available at the times indicated to assist with the coursework.

Reserved for Inf1-FP Demonstrator available Location
Mondays 3:00–5:00pm 3:00–4:00pm CLW
Tuesdays 2:00–5:00pm 3:00–4:00pm CLW
Wednesdays 2:00–5:00pm 3:00–4:00pm CLW
Thursdays 2:00–5:00pm 3:00–4:00pm CLW
Fridays 3:00–5:00pm 3:00–4:00pm CLW

After week 2, the labs are run on a drop-in basis and you can go as often as you like.

Videos: Recordings of lectures are available online. Please note that these recordings supplement lectures by allowing you to review the material presented and revise for the exam. They are not intended as a substitute for attending and participating in the lectures themselves.

Links: Video recordings of lectures; some video lectures from Microsoft on Haskell; Introduction to Functional Programming using Haskell: MOOC by Erik Meijer .

Online: Some of the Inf1 tutors provide help in the Inf1 IRC chatroom (see Kit Barnes's guide to IRC).

Books: You will need one of the following textbooks:

Section/page references in both books that correspond roughly to the lectures are given above. Read at least these. It would be better to read more than these pages, to get the context and to understand related concepts. If you find a topic in one of the books hard to understand, try the other one.

All of the following books were also written for beginning students, and may provide a useful alternative perspective.


  • If you are using your own machine, we recommend that you download and install the "Haskell Platform" from here and Emacs from here. Instructions about how to install Haskell mode in Emacs are here. It is already installed in Emacs on DICE but it is not currently installed in Emacs on the open access Windows machines.
  • If you can't get these things working on your own machine, one option is remote access to DICE, where everything works, using an ssh client or NX. Or install DICE on a virtual machine. Finally, the university's Information Services department run free Mobile Device Clinics that offer help installing software on Windows and Mac OS X laptops.
  • has everything you could possibly want to know about Haskell, including the definition of the language, a list of books on the subject, links to conferences/workshops, various libraries, and more! Have a look at "A Gentle Introduction to Haskell".
  • Documentation of Haskell's predefined functions is in HackageDB, which also includes documentation on the rest of the Haskell library. The library can conveniently be searched using Hoogle.
  • Some handy functions that will be used in the tutorial exercises are listed here.

Examinations: Assessment for Inf1-FP is done through two exams.

  • The class test is a 35-minute closed-book hand-written exam held on Tuesday of week 6 in place of the lecture. The class test contributes 10% towards the final mark for the course. Your marked paper will be returned to you in your week 7 tutorial.
    Link: class test (solutions)
  • There is a 2-hour open-book mock programming exam during week 10 as practice for the final exam; it does not contribute towards the final mark for the course. For this, you must attend for your allocated session and only that session.
    Link: mock exam (solutions)
  • The final exam is an 2-hour open-book programming exam scheduled for the examination weeks at the end of the semester. The final exam contributes 90% towards the final mark for the course.
    Links: first sitting (template, solutions); second sitting (template, solutions)

Links: past papers; instructions for programming exam; marks and grades.

Feedback will be provided on all of your work, with the exception of the final exam.

  • Tutorial exercises ("formative"): feedback is given orally on your attempts at tutorial exercises during your tutorial. On some exercises, automated feedback is available online from the CamlBack system.
  • Class test: this will be marked and returned to you in your tutorial in week 7. The numerical scores are accompanied by brief written feedback in cases where your solution is deficient.
  • Mock exam ("formative"): this will be marked by computer and the result returned to you during week 11 as an approximate indication of your performance. (The final exam will be marked by a human, using this automated testing as the starting point.)

Contact: The course lecturer is Don Sannella and the course teaching assistant is Karoliina Lehtinen. The best time to speak to Don is at the end of a lecture, or come to his weekly Inf1-FP office hour before the Tuesday lecture:

  • Tuesday 10-11am, Informatics Forum room 4.04

If contacting Don or Karoliina by email please use your University address. You can also always ask questions on the Inf1 IRC chatroom.

Programming Competition: Each year the course concludes with a programming competition, with an actual prize draw and first prize sponsored by software company Galois. The competition centers round the drawing of fractal-based images. This provides students with an excellent opportunity to show off the skills they have learned during the course, and to set loose their creativity in an unconstrained environment. Every year students have gone on to amaze the course organizers—and themselves—with ingenious and beautiful drawings and fractals, and this year is certainly not going to be different.

Links: Entries from 2014; 2013; 2012; 2011; 2010; 2009; 2008; 2007; 2006; 2005.

Home : Teaching : Courses : Inf1 

Informatics Forum, 10 Crichton Street, Edinburgh, EH8 9AB, Scotland, UK
Tel: +44 131 651 5661, Fax: +44 131 651 1426, E-mail:
Please contact our webadmin with any comments or corrections. Logging and Cookies
Unless explicitly stated otherwise, all material is copyright © The University of Edinburgh