The Problem with F# Evangelism
This article retreads common complaints about the F# experience for outsiders that I&#x27;ve seen numerous time. I&#x27;m going to go a different direction.<p>The problem with the F# community is that they keep asking how to convince C# developers to use F#. I&#x27;m convinced that is not the right way to grow the F# ecosystem.<p>Most C# developers tend to come from enterprise and have a set of values and practices that is generally at odds with open-source, functional languages. They are used to producing codebases that can never be open-sourced, using tooling provided by a single vendor. They don&#x27;t tend to be the ones contributing interesting or new libraries. In fact, this is a large issue with .NET in general. Most strong libraries are spiritual or literal copies of something from the JVM world.<p>This urge hurts in other ways. For instance, Don Syme has indicated he doesn&#x27;t want to put things like Type Classes or Dependent types into the language because it adds a cognitive load to the language that&#x27;s hard to balance vs the gains in productivity. But their absence means that many of the dev&#x27;s you actually want contributing to the ecosystem, just use other languages. They adopt Haskell&#x2F;Idris&#x2F;Scala&#x2F;whatever and start contributing blog posts, tweets, libraries, conference talks, etc.<p>I actually think a large part of this decision is that many of these things would make F# pretty incompatible with C#, which is trumpeted as a feature, but again, it waters down the language to the point that C# dev&#x27;s look at it and say, &quot;Why bother? It&#x27;s compatible like VB is, so C# can already accomplish the same things.&quot; And in the meantime, it prevents new features that would attract others.<p>What sounds more enticing to developers, &quot;More Functional C#&quot; or &quot;Haskell With Better Tooling&quot;? What&#x27;s more, there are even examples of how some of these features could be implemented (both Type Classes and Dependent Typing exist in some capacity through feature requests and F*, an experimental Microsoft language).<p>Basically, F# should be more about being different than the rest of .net, than trying to be &quot;.net through an OCaml set of glasses&quot;.