Functional Programming in C#: How to write better C# code