Functional Programming in Swift, Chris Eidhof, Florian Kugler, Wouter Swierstra.