Functional Programming Principles in Scala (École Polytechnique Fédérale de Lausanne)