I learnt so much in my OCaml classes and really enjoyed programming with it.
I learnt so much in my OCaml classes and really enjoyed programming with it.
* gadts
* first class anonymous modules
* functors (module level functors)
* polymorphic variants
* row polymorphism
* effect handlers
Although, I must confess, I haven't exactly kept up to speed on F# development. Perhaps F# has added some of these features recently?
It's not a perfect comparison, but, having spent some time dealing with all the unusual and surprising ways that some Scala language features interact with Java's type system, I tend to agree with the F# community on that point.
The problem with Scala is that good, maintainable code is defined more by how many language features you have the discipline to avoid using than it is by how many you do. And that makes it more difficult to keep a large Scala codebase maintainable on a team with varying levels of experience. Freely mixing ad-hoc and subtype polymorphism (that is, type classes and subclasses), for example, is a very short, very slippery slope to a situation where the best way to figure out how the code works is to already know how the code works.
And the App Store still runs on a Java port of WebObjects to this day.
But as for other languages, there is pros and cons for each of them. I never tried F#, only Haskell and OCaml.
However in general, any would do.
Quite curious what those 1831 members would do, if Microsoft decides to play a VB6/VB.NET (both now in maintenance) on F#.
I expect it to fade into oblivion the day Microsoft decides to drop it.
Those foundation members will hardly keep it relevant, once it becomes yet another third party language on .NET ecosystem.