This has absolutely nothing to do with functional programming.
> delegates, lambdas, list comprehensions, anonymous types
Syntactic sugar.
> higher-order functions, true closures
Java has them too. They're called “objects”.
> a sprinkle of monads
Every higher-order language with strict evaluation (which includes every object-oriented language) already has at least one monad, whose use is pervasive and inescapable.
So, unless you have user-definable monads, where is the improvement?
C# does have user-definable monads. There are many in this project (Option, Either, Try, TryOption, Task, Reader, Writer, State, Parser, ...)
Yes, you can.
Here's an example from version 2.0 of lang-ext (which is WIP and will be released soon) [1]:
[1] https://github.com/louthy/language-ext/blob/type-classes/Lan...
If you can't even postulate a theory (the monad signature and its equational laws), it doesn't make sense to talk about what models of the theory exist (concrete instances).
Its familiar Java/C like syntax, classic use of OOP, enterprise vibes will mean it'll be very familiar and easy for most to pick up. And as you go deeper, it'll introduce you to anonymous delegates, lambdas, true generics, higher order functions, true closures, list comprehensions, anonymous types, type inference, lazy evaluation and even a sprinkle of monads.
With the language extensions, you can get even further.
This is a great way to start learning about FP concepts without even knowing it and it'll make your switch to a more thorough FP language much easier, such as MLs, Lisps, Erlangs, and most proof languages.