Codes from FP101x Course https://www.edx.org/course/introduction-functional-programming-delftx-fp101x#.VJlz-jA0A