IA014 Advanced Functional Programming

Course information

Prerequisities

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.

Exam

The exam will have two parts: midterm test (20% of the total points) and final exam (the remaining 80%). Both are written. The questions will be in English, but you are allowed to answer in Czech if you prefer to. 

Midterm test will take part at the time of the lecture sometimes around the half of the semester. I will let you know at least two weeks in advance. 

Sample midterm exam from 2014

FInal exam: there will be one chance to take the exam in the last week of the semester, otherwise multiple dates in the exam period, as usual.

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

For both midterm and final exams you will be provided with a copy of the Lambda Calculus Cheatsheet

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 availble 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.

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: