Functional Programming and Type Systems (M2 MPRI)