The short answer - F# and similar languages provide confidence in correctness due to being strongly typed.<p>The long answer - <a href="https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/" rel="nofollow">https://bartoszmilewski.com/2014/10/28/category-theory-for-p...</a>
Computational expressions [0] seem like a really cool language feature, but i’ve never used f#. Has anyone used them or seen them go well/poorly? Also curious what other languages’ alternatives there are, besides just do notation.<p>[0] <a href="https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/computation-expressions" rel="nofollow">https://learn.microsoft.com/en-us/dotnet/fsharp/language-ref...</a>
>Strict dependency order<p>>In F#, all variables, functions, types and files can only depend on variables, functions, types and files defined earlier. The benefits of this are the fact that a circular dependency is not possible by default and extra clarity with “what depends on what”, which helps during code analysis and PR reviews<p>Ehm. So it's like C... with no forward declarations?
Why are algebraic data types called "discriminated unions" here? Is there a subtle difference between the two or is it just that F# calls the same feature differently than OCaml?
> No nulls by default
...While many modern languages added some control for doing more null checks to prevent NullReferenceException, F# avoided them from the inception. This means such exceptions are nearly impossible<p>A great feature that Golang couldn't get right years later.