We believe that F# is a great language for effective software development. This is in part due to features of the language itself, and in part because it is part of the .NET ecosystem, which brings the power of .NET libraries to the language we love to use to solve problems.
Sometimes the libraries' APIs are a little awkward to consume in F#, or at least take us in the direction of writing non-idiomatic object oriented code rather than our preferred functional style.
The F# community really excels in creating F#-specific libraries or wrappers to reduce that friction. There are 2 such projects that I'd like to highlight, that should significantly make it easier for F# developers to take advantage of new features Microsoft are investing a lot time in: Cosmos DB and Aspire.
FSharp.Azure.Cosmos
Microsoft's Azure Cosmos DB is a globally distributed, multi-model NoSQL database service designed for high availability, low latency, and elastic scalability across multiple regions.
Andrii Chebukin has created FSharp.Azure.Cosmos to simplify its use with F# projects. It uses Discriminated Unions for response handling, Computation Expressions for database operations, and query extensions to provide TaskSeq-based iteration over result sets. The project's background page gives a great overview.
FSharp.Aspire.Hosting
.NET Aspire is Microsoft's opinionated stack for building observable, distributed and scalable applications with .NET. At CIT we use Farmer to deploy applications and Azure resources, but the built-in observability and dashboards features in Aspire are definitely something I want to look into more.
Loïc Denuzière's FSharp.Aspire.Hosting project allows us to, as the README is titled:
Write your Aspire AppHost in F#!
It provides the additional F#-specific code that some integrations require, making configuring the AppHost in F# just as easy as Microsoft have made it in C#.
Time to give them a go!
I look forward to seeing what we can do with Azure Cosmos DB and .NET Aspire -- and huge thanks to Andrii and Loïc for smoothing the path for F# developers to do that. I expect we'll have more to share on these tools in the near future!