During its evolution C# gradually gets more and more features which belong to functional paradigm.

Subjectively these features allow (at least me) to be more productive, fluent and write maintainable and readable code (well.. I thins so).

But I'm curious whether some rigorous proofs (not just testimonials) exist that for some particular task functional paradigm shines comparing to imperative one.

I've heard many times about thread safety due data immutability, but are there more examples?

A friend of mine just asked me:

Imagine that C# and F# developers are payed equally and can be easily hired. For projects of which type would you clearly vote for F#?

Sure, it is not an 'either or' dichotomy, nevertheless it would be nice to have a kind of decision tree for choosing from functional or imperative. Especially for corner cases when there is clearly a winner.