IA014 Advanced Functional Programming

Course information

Prerequisites

There are no formal requirements. However you are expected to know basic functional programming concepts (evaluation, recursion, abstract data types, pattern matching, lists (including comprehensions), higher-order functions, . . .). The expected knowledge basically corresponds to the functional programming part of the  IB015 Non-imperative programming course. 

We will use mostly Haskell, but if you know Standard ML, OCaml or F#, you should be fine. To catch up on differences to Haskell, I recommend one of the two Haskell books below.

Lectures

This semester strictly online. The link is available at all the appropriate places in the IS, including the interactive syllabus and your timetable. We will be using the Zoom platform. Please login using your university account   (cesnet.zoom.us → Sign in with SSO (eduID.cz) ).

Exam

There will be an oral exam, due to the current COVID-19 restrictions. The Zoom platform will be used.

Exam language: English or Czech (Slovak), according to your preference.

To somewhat simulate a "normal" semester (including the  midterm exam), the exam has two parts:

Part I - theory behind functional programming: covers lectures II.-IV. (the history of lambda calculus and functional programming will not be examined)

Part II - modern concepts of functional programming languages: covers lectures V.-IX.

  • These parts can be taken either separately (on two different dates), or at the same time (your choice).  
  • You have to succeed in both parts to get a passing grade (A-E). 
  • In the case of taking both parts on one day, and failing exactly one part, only that part you fail needs to be retaken. 
  • Each student is allowed at least three attempts at each of the two parts.

For the first part of the exam you are allowed to consult  the Lambda Calculus Cheatsheet as often as you like.

You are allowed to complete the course with colloqium (k) or zápočet (z) if you prefer to.

Literature

There is no single book which covers the entire course. For each lecture I'll be giving a list of papers/book chapters which cover the topic. The papers will be mostly research or survey paper freely available to students of this course. The book chapters will be references to the two books below.

B. O’Sullivan, J. Goerzen and D. Stewart: Real World Haskell

Available for free at http://book.realworldhaskell.org/ I will abbreviate this book as RWH throughout the course.

M. Lipovača: Learn You a Haskell for Great Good!

Also available for free, this time at http://learnyouahaskell.com/ I will abbreviate this book as LYaH throughout the course.

The following book has been highly recommended to me by several people, and I have to agree that it is indeed really good. Note, however, that this one is not free (and you do not need to go and buy it, you can pass the course just fine without it).

C. Allen, J. Moronuki: Haskell Programming: From First Principles ()

Some of the other books, which may be useful to you, are:

  • H. Barendregt: Lambda Calculus : Its Syntax and Semantics
  • G. Michaelson: An Introduction to Functional Programming Through Lambda Calculus
  • B. Pierce: Types and Programming Languages
For the second half of the course, some useful stuff can be found on Stephen Diehl's excellent page: