First-class functions
C# has closures, and can pass function pointers with delegates.
--
immutability is the default
Mutability can be a useful tool in some situations, but it is often unnecessary and potentially harmful.
I think this point has probably been argued to death by now, but I still can't see this as a good idea. 'Side effects' are really just a reality of software development. For example if I want to fade in a GUI element on a page, I don't want to create a new element for every transition change. Theres nothing wrong with mutable state, but it is nice to have immutability for some use cases. In this case c# has valuetypes, and the const/readonly modifiers.
--
Strong static type checking
Yep C# has had this since the beginning. And you can even use 'dynamic' if you really want which moves all type checking to runtime.
--
Algebraic data types and pattern-matching
I feel like these are more buzz words than actual substance. The Html example given also doesn't seem exactly clear to me how the operations are being performed. Here's a pseudo c# way of doing it:
rootHtmlElement
.SelfAndDescendants()
.OfType<DivElement>()
.Where(d => d.Attrs["class"] == "foo" || d.Attrs["class"] == "bar")
.Select(d => d.ChildElements.OfType<TextElement>().FirstOfDefault())
the typical object-oriented implementation of this in Java would involve multiple subclasses of a common base class.I assume they mean that all element types would inherit from a base IHtmlElement? This seems like a good thing to me.
--
Type inference
Again C# has these abilities with 'var a = 0' for example. It won't infer method return types, not because it couldn't, but because it's just generally clearer to have the explicit return type written there in the code for the reader.
--
a replay-capable debugger
C# has intelliTrace for this. Though I expect both suffer from the same problems, slow execution while in use, and huge memory footprint.