Cellular Automata in F#
isthisit.nz
isthisit.nz
There can be a lot to learn, which is a mix of functional programming stuff (recursion-first, immutability, and getting used to type definitions and function signatures), and F#-specifics like computation expressions, active patterns and quotations.
There will be many better examples than mine, but here's some more F# cellular automata stuff from last year's Advent of Code (spoiler alert): https://github.com/lukesdm/aoc-2020/blob/main/FSharp/Day24.f...
1. F# is pretty clearly a second-class citizen on the CLR compared to C#, and IMO this really hamstrings the biggest advantage of F#, i.e. access to the CLR. For example, until F# 6.0 F# had its own Async primitives while C# had its own, and you can guess which one most CLR libraries tended to use.
2. Some of OCaml's more advanced type features didn't make it to F#, notably functors - and as a result writing generic code involves writing classes and interfaces and not functors or typeclasses. I really don't like this bit of F#, and I wish it had a more FP way for writing generic code. If you want a much more elegant FP experience, OCaml is significantly better.
3. The community is small, not as small as, say, OCaml's, but IMO if you want a thriving community for a hosted FP language Scala is more interesting. But Scala is much more "multi-paradigm" and OO than I like, so I prefer F#.
You're kidding, right? Cisco (and juniper?) Switches run erlang on the control plane, as does freaking Whatsapp and the British NHS; discord, divvy, brex, pagerduty, slab, PepsiCo, Boston MTA, and stripe use elixir to varying degrees, not to mention tons of companies you haven't heard of.
It shares heritage with OCaml and Rust. I sometimes like to call F# "Rust with garbage collection".
However it has always been a kind of black swan on Microsoft's .NET strategy and Visual Studio tooling.
The best way to use it, while being able to enjoy all the tooling on the .NET ecosystem, is to mainly focuses on using F# to write libraries, with the UI written in C#/VB.