I have a side project where, for some years now, I've supported an app built using F# with Xamarin.Forms and the Fabulous MVU framework. Before .NET 6, things were generally pretty great, and I thought this was an impressive achievement considering how many moving parts the combination of .NET with F# + Xamarin + Fabulous entails.
As .NET 6 and MAUI started to come on the scene, stuff went haywire pretty badly, tooling issues like breakpoints in Visual Studio no longer working in my projects, obscure build errors, confusing build warnings, dependency hell particularly with Xamarin.Android NuGet packages and Xamarin.Essentials. I'm still not up to date with all NuGet packages because doing so breaks my app at runtime. I'm in this halfway point in regards to use of the PackageReference project type. Things haven't been smooth lately for F# and Fabulous projects.
Things are slowly getting better though, and I would say that my experience is probably not entirely typical due to the inclusion of Xamarin, which introduces a whole additional layer of crazy. I think if you were to use F# for backend web services for example, then your experience would probably be a great deal more palatable than mine. I don't think F# is stagnating or dying by any means, but I do feel that it is still a second class citizen to C#. I hope MS continues to work towards this not being the case, because with all the "batteries included" of .NET behind it, I think F# is a great functional-first language.
F# works, it gets updates and there is good (not perfect) tooling. Everything you can do with C# can be done with F# too. Although most APIs don’t feel very natural in F#. F# has only a small ecosystem, so you may not find the right library for every task, and need to use something object oriented from the C# world instead.
It is, hands down, my best experience working in a functional language. I do hobby work in it, and it seems super nice, but I'm not sure where everyone is.
> still very few people use it.
Looking at a chart of GitHub and StackOverflow usage[1], OCaml/F# seem almost steady compared to the other functional languages, my suspicion is that Rust absorbed a lot of programmers looking for functional concepts in programming languages.
My impression - the people who use it historically (and I've met a few) aren't the companies that typically proponent open source software and the like. They are "closed source" shops (e.g. finance, insurance, etc). Even I am not willing to post on more than a throwaway account. I'm currently using it for large scale production systems in a very large public company powering a large data volume product with very high peaks of customer traffic and it works a treat. We decided to try C# 9 after some F# because "higher management" - compared to F# the dev's have found it verbose and painful still, despite the new features.
The productivity benefits are small and sprinkled - I don't personally think there isn't one "killer feature/app". It isn't just one thing, its little things that add up. Given the team jumped from other ecosystems (e.g. Go/Node/etc) they found F# easier to approach than C#. This is the perspective of the team I run and it comes up in PR comments (I do less code writing these days). Comments like "don't have to do this in F#", or "we need a framework for this because C#" are known to occur. Easier unit test writing, less dep injection headaches, concise function passing, easier inlining of math for perf, easy mocking/stubbing, unions, etc etc.
The big weakness to me is that the people that use it typically don't want to flaunt it, and that means good mentoring, the best/simple patterns to use, etc and management buy-in are not really public. Communities that you can join are not into large scale apps, meaning good scalable patterns and lessons learnt are hard to find.
the core F# language is great, however, what tends to suffer is the F# specific libraries (you can use all .NET libs, but I'm talking about the F# specific ones) and community. There are some things that are getting developed, but my experience is that things get abandoned, progress is slow, or things are somewhat clunky. But if you are writing your F# without any need for F# specific libs then it is great and you can interface it with C# code easily.
My experience is good, small but very active and engaged community, interop with C# is seemless, I architect a large healthcare care system, 5% F# and 95% C# and very happy
...and is it used much compared to C#, or is its use at least growing, or is it stagnating/dying?