Having used and enjoyed F#, I ended up programming in Scala which is almost the same language, despite the huge superficial differences:<p>- Indentation delimited blocks vs curlies<p>- CLR vs JVM<p>- Whitespace vs Parenthesis for function calls<p>- Currying by default vs currying optional<p>Despite all this, when you actually start coding, it's remarkably the same:<p>- Immutability by default, transformations rather than mutation<p>- Less classes with embedded implementation logic, more "dumb" records with external functions<p>- Structural pattern matching<p>- Tagged unions<p>- Type inference<p>- Convenient definition of record/struct-like data types with free copy-constructor<p>- Operator overloading<p>- Easy FFI to external libraries in a different paradigm<p>- Easy "dropping down" to mutable, imperative code (e.g. for performance, or interop)<p>- Both have lots of syntactic and semantic warts and corner cases, though few enough you can live with them<p>- Garbage collected, multithreaded, JITed runtime<p>- Both compile to Javascript<p>While every single feature looks totally different on the surface, starting with a totally different syntax, the two languages are more the same than different. If you look at the tutorials linked from that page, all of them can be translated almost line-for-line from F# to Scala (and vice versa: take any random Scala tutorial, and you can trivially translate it line-for-line into F#)<p>Scala brings with it a bigger ecosystem, both in Scala and from the JVM, and better tooling support in general (Both Scala-specific, as well as general JVM tooling which all works with Scala: profilers, debuggers, package managers, ...), and slightly more seamless platform interop (Scala <-> JVM is less jarring than F# <-> C#), which is why I ended up sticking around.