Functional Programming with C#: Create More Supportable, Robust, and Testable Code - Simon Painter