https://celery94.github.io/posts/functional-programming-csharp-practical/