Informatics 1 – Functional Programming

Contents

  1. People
  2. Course description
  3. Schedule
  4. Examination
  5. Programming competition
  6. Course resources
  7. Other resources & external links

1. People

Lecturer: Philip Wadler
<wadler@inf.ed.ac.uk>
IF 5.02
Teaching Assistant: Phil Scott
<phil.scott@ed.ac.uk>
IF 2.05

Return to top

2. Course description

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.

The course is part of Informatics 1.

Return to top

3. Schedule

The course comprises 20 lectures and 9 tutorials, spread over the eleven weeks of the semester. There is also the drop-in lab: special times at which the computer room in Appleton Tower is staffed by demonstrators, who are ready to help out with any questions on the course material. Lecture notes, tutorial exercises and solutions will be made available here on a weekly basis.

Lectures

Lectures are on Mondays and Tuesdays, starting week 2. See also the semester 1 timetable for Informatics 1.

Drop-in lab

At these times lab demonstrators will be available to assist with the coursework. Drop-in lab is held daily at Computer Lab West or North on level 5 of Appleton Tower.
Mondays 3:30–4:30pm Lab West
Tuesdays 2–4pm Lab West
Wednesdays 2–4pm Lab West
Thursdays 2–4pm Lab West
Fridays 3:30–4:30pm Lab North

Every student should attend their assigned lab during Lab Week in week 2; lab assignments are here. Lab week exercises are posted in the table below.

After week 2, the labs are run on a drop-in basis.

Tutorials

Tutorial groups with their times and places can be found here.

Tutorials are held in groups of 10–12, on Thursdays and Fridays, starting in week 3. Students are expected to prepare for each tutorial, which includes completing the exercises and reading the appropriate chapters in the textbook.

Tutorial exercises will be posted in the table below, and are due at the tutorial of the same week—for instance, the exercises of week 3 will be discussed during the tutorials on Thursday 6 and Friday 7 October. Exercises will be made available at least a week before they're due.

You must attempt the work before the tutorial and bring with you a printout 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.

Schedule

Week Subject Lecture notes Reading assignment Tutorial exercises Solutions
1. 19–23 Sept (No FP this week) *Tutorials start in week 3*
2. 26–30 Sept Introduction. Functions. Lab Week lect01.pdf lect01.zip 1–3 (pp. 1–66) labweek.zip solutions
3. 3–7 Oct Lists and Recursion lect03.pdf 4–7 (pp. 67–176) tutorial1.zip solutions
4. 10–14 Oct More fun with recursion lect05.pdf 8–9 (pp. 177–212) tutorial2.zip solutions
5. 17–21 Oct Map, Filter, Fold, Sections, Binding lect07.pdf 10–12 (pp. 213–286) tutorial3.zip solutions
6. 24–28 Oct Class test, Proof proof.pdf *Class Test* tutorial4.zip solutions
7. 31 Oct–4 Nov Algebraic data types lect11.pdf lect11.hs 13–14 (pp. 287–356) tutorial5.zip solutions
8. 7–11 Nov Abstract data types lect13.pdf lect13.zip 15–16 (pp. 357–414) tutorial6.zip solutions
9. 14–18 Nov Type classes lect15.pdf lect15.zip 17–21 (pp. 415–534) tutorial7.zip solutions
10. 21–25 Nov IO and Monads lect17.pdf lect17.zip *Mock Exam* tutorial8.zip solutions
11. 28 Nov–2 Dec Hamming, Curry–Howard lect19.pdf lect20.pdf

Return to top

4. Examination

Examination is done through two tests. The first, the class test, is a hand-written exam held on October 24th in place of the lecture (at the same time and place). The second, the final exam, is a programming test held in the computer labs, scheduled for the examination weeks at the end of the semester. The class test contributes 10% towards the final mark, the final exam contributes 90%.

Notes

Return to top

5. Programming Competition

Each year the course is concluded with a thrilling programming competition, with an actual prize draw and first prize. The competition usually 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.

This year's entries can be found here.

Previous programming competition entries:

Return to top

6. Course resources

Textbook

Haskell: The Craft of Functional Programming, Third Edition. Simon Thompson. Addison-Wesley, 2011.

Lectures on video

The lectures will be captured on video and made available here.

Last year's lectures are available here.

Inf Base

Inf Base is a staffed student help desk. You can make an appointment on the wiki, or just drop-in to ask questions about the course!

Previous exams

Previous years' webpages

Previous years' webpages can be found here (note that some links will not work):

Questions & Answers

See the newsgroup or the wiki.

Return to top

7. Other resources & external links

  1. An extra exercise sheet covering list comprehensions and recursion:
  2. Alternative textbooks: All of these books were also written for beginning students, and may provide a useful alternative perspective.
  3. Online material on Haskell:
    • Real World Haskell by O'Sullivan, Stewart and Goerzen.
      This is an introductory textbook with a practical angle of approach, fully available online.
    • A Gentle Introduction to Haskell by Hudak et. al.
      It would be good idea for everybody to print out a copy of this and bring it with you to tutorials/demonstrations as a reference.
    • Two Dozen Short Lessons in Haskell by Rex Page.
      This book is available in PostScript and PDF format. To read the PostScript version outside of the University labs, you may need to install additional software. If you can't get a hold of the official textbook, then this one may be of some help.
    • Learn You a Haskell for Great Good by Miran Lipovaca.
      An easy introductory web page with lots of examples.
    • The Haskell Reference at ZVON by Miloslav Nic.
      This site is a friendly version of the Haskell Report. It contains information about all of Haskell's predefined funcions like drop, take, ord, chr, sum and length. Good reference website.
    • A Tour of the Haskell Standard Prelude by Bernie Pope and Arjan van IJzendoorn.
      Another good introduction to Haskell's predefined functions.
    • Video lectures from Microsoft on Haskell.
    • Lecture Notes and Exercises of John Hughes' Introductory Course on Haskell. (See also the old exams at the bottom of the exercises page.)
    • www.haskell.org
      This site has everything you could possibly want to know about Haskell, and more! From "A Short Introduction to Haskell" and the aforementioned "A Gentle Introduction to Haskell" to the definition of the language, a list of books on the subject, links to conferences/workshops, and various libraries.
  4. Online material on pair programming:
  5. You and Your Research by Richard Hamming (referenced in Lecture 19).
  6. Teaching Assistant
    Please feel free to email the teaching assistants with any questions you may have concerning Haskell.
  7. If you are a Mac user, we recommend downloading the Haskell compiler from here
    You will also need to install the necessary libraries. Open a terminal and type
    > cabal update
    > cabal install QuickCheck GLUT
    > echo ":set -fno-ghci-sandbox" > ~/.ghci
  8. Lecturer
    If after consulting all the above resources, you still can't find an answer to your question or just want to know even more, please email the lecturer.
  9. The computing society Compsoc run a chatroom for all inf1 courses.

Informatics Teaching Organisation

Courses are administered by the Informatics Teaching Organisation (ITO), located on the fourth floor of Appleton Tower. Contact the ITO for adminstrative issues, including changes to lab sessions or tutorials, using this form. When it is inconvenient to use the form, send e-mail to <ito@inf.ed.ac.uk>.

Return to top


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: school-office@inf.ed.ac.uk
Please contact our webadmin with any comments or corrections.
Unless explicitly stated otherwise, all material is copyright © The University of Edinburgh