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