functional programming in c#