lecture notes from Functional Programming Principles in Scala course on coursera.org