# Course Syllabus

## Course-PM

TDA342/DIT260 Advanced Functional Programming HT19 (7,5hp)

Revised Dec. 28th, 2020

Department of Computer Science and Engineering
Chalmers University of Technology / Göteborg University

### Course aim

​The aim of the course is to explore the powerful mechanisms that functional programming languages offer to solve real problems and structure larger programs. The focus lies on library design and the concept of embedded languages.

TimeEdit

### Contact details

#### Student representatives

MPALG             andsjobl@student.chalmers.se                       Anders Berggren Sjöblom

MPALG             haqvinsson99@gmail.com     Hampus Hagstrand

TKDAT               filip00.nordmark@gmail.com                          Filip Nordmark

TKDAT               luksch1121@gmail.com          Lukas Schiavone

MPALG             786834013@QQ.COM             Yuhan Wang

We will run a hybrid model, but the first week of the course will be fully online.

### Course code

The code for the whole course is in the following repo -- and you can clone it!

### Course literature

Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen

There is an online version of it. Some related papers to read and other material will be provided with the lectures.

These books are all good but presented in order of decreasing relevance for the AFP course.

### Course design

#### Lectures

There are two 1.5-hour lectures every week. The students are expected to do a lot of independent programming and self-study. Lots of help is provided.

#### Assignments

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 the lecturer.

• You need to pass all three assignments and the exam in order to pass the course.
• Each of the assignments (except the last one) is divided into two parts with separate deadlines.

### Examination form

#### Assignments

Laborations are graded with 3,4, and 5. Once you finish all the labs, you will get the following temporary grade:

``tmp = (3*grade lab 1  + 5*grade lab 2 + 4*grade lab 3)/12``

Above, the 3,5, and 4 coefficients are the weights of the labs based on their difficulty.

To fix some round errors, the final score of the lab is:

``grade_labs = (tmp - 3) * 1,4999 + 2.5``

#### Exam

The exam is graded as 3,4, and 5.

To obtain the final grade, you need to pass all the assignments and the exam. The final grade for the course is composed of 60% for the lab's score and 40% for the exam's score.

``total_grade = 0.6 * grade_labs + 0.4 * grade_exam``

In the above formula, grade_labs and grade_exam are integers numbers (i.e., 3, 4, or 5).

The `total_grade` then gets rounded generously, meaning, 4.5 -> 5.

If you are a Chalmers student, then you get the score `total_grade` as the grade for the whole course.

GU students get G if `total_grade` is 3 or 4 and VG if it is 5.

### Learning objectives and syllabus

#### Learning outcomes

• Design embedded domain specific languages (EDSLs)
• Explain and exemplify (abstract) syntax, semantics
• Implement EDSLs in Haskell (as combinator libraries)
• Type classes
• (Generalized) algebraic datatypes
• Use specification based development techniques
• Formulate and test properties about the program
• Reason about correctness of functional programs
• Transform programs on the basis of such reasoning
• Explain and discuss the above topics

#### Detailed course syllabus

For GU students

For Chalmers students

### Changes made since the last occasion

• Move lecture of Functors and Applicative Functors before the ones about Monads

Date Details Due