Software Architecture: Functional Programming in C#