<i>> Anything C# can do...</i><p>Yes, yes, you <i>can</i> do anything in F#, but what <i>should</i> you do?<p>My opinion is that that what F# is missing is a good set of idioms and a strongly opinionated set of guidelines. To my beginner's eyes, every F# codebase I've seen feels like it's written in a completely different language; it's like the opposite of Python's "one right way to do everything".<p>I've heard that F# is great for domain-specific languages, but in most cases a DSL is the cardinal opposite of what I want. I want a <i>common</i> language that I can use to express a multitude of different concepts. It seems like all of the guidance out there about F# is about showing off features, being extremely clever, or using F# to teach functional concepts, not actually about <i>writing useful applications</i>.