- Mondays, 13:15–15:00, EF (except for week 10)
- Monday, March 5th, 13:15–15:00, EL41, EL42
- Thursdays, 10:00–11:45, EF (except for week 7)
- Thursday, February 15th, 10:00–11:45, SB-L208, SB-L216
- MPALG, firstname.lastname@example.org, DAVIDE DONATO
- MPALG, email@example.com, JAKOB LARSSON
- TKDAT, firstname.lastname@example.org, GUSTAV NILSSON
- Utbyte, email@example.com, JAAKKO RINTA-FILPPULA
- TKDAT, firstname.lastname@example.org, ARI VON NORDENSKJÖLD
We use Slack.
Slack as a communication channel is meant to be used to post questions and have discussions related to the course. Sharing (total or partial) solutions in it is forbidden.
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.
DSL: design embedded domain specific languages
- DSL.Concepts: (abstract) syntax, semantics, ...
- DSL.Implement: implement EDSLs in Haskell (as combinator libraries)
Types: read, understand and extend Haskell programs which use advanced type system features
- Types.Class: type classes, newtypes, deriving, ...
- Types.GADT: (generalised) algebraic datatypes & type families
- Types.HOT: functors, monads and monad transformers
Spec: use specification based development techniques
- Spec.Test: formulate and test properties about the program
- Spec.Prove: reason about correctness of functional programs
- Spec.Trans: transform programs on the basis of reasoning
The AFP course requires a BSc in Computer Science or equivalent, mathematical maturity, a basic course on Functional Programming (like our version) and a course on Programming Languages (like Programming Language Technology or Programming Paradigms). Other recommended courses are Logic in CS, Algorithms and Finite automata theory and formal languages.
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
The exam is graded as 3,4, and 5.
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
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.