Functional Programming Principles in Scala by Coursera assignments solutions