my take:
#ecosystem
- vibrant and friendly community
- open source (long time ago, use pr, wrote by community)
- cross plat (linux/mac/win/ios/android)
- is .NET, same standard library as C# or VB.NET and virtual machine (CLR). Finally open source
- use nuget components written for .net
#language
- fun to use
- concise, i can easy write code without boilerplate
- easy async, parallel, gpu
- easy interop with c#, native
- fast
- multi-paradigm (functional first, but can do oop like c#)
- help write correct code (no null reference => no null reference exception, pattern matching,
- unit of measure (like 1<m/s> )
and a lot, read the links above for a better (and faster) summary
about license: https://github.com/Microsoft/visualfsharp/blob/master/Licens... -> http://www.apache.org/licenses/LICENSE-2.0
the open source repo https://github.com/fsharp/fsharp
is open source AND accept pull request, the development is done on github, very friendly
the .NET too is going opensource, see https://github.com/dotnet/corefx (.NET base class libraries) and https://github.com/dotnet/coreclr (.NET virtual machine) and https://github.com/dotnet/roslyn (C#/VB compiler)
This is only true in the same sense that there are no NRE in C# as long as you don't use reference types. F# seems to be a fine language, and its non-nullable types are certainly a good thing, but you have to handle null references in F# just like in C#.
In practice you catch these out at the boundaries and have nice clean null-free F# code.
(I'm not very experienced with F# and would be thrilled to be shown that I'm incorrect!)
But personally the thing I most like about F# is the community.
- Powerful tooling with IDE, Debugger, Packet Managers, Build system
- Access to the whole .NET ecosystem
- Powerful concurrency and parallelism constructs
- relatively easy to reason about. If you don't know how to build something functionally you can still build things in a C#-like way because mutability and strict evaluation is there.
- I like the very concise and yet good to understand syntax. The type interference is great.There are other good reasons though. Modern day F# is (except for a very small number of type resolution foibles) 100% backwards compatible to the first release. This is a huge problem for Haskell in business. Also, Type Providers are totally awesome for scripting over structured data.