* [<Extension>] methods vs `type X with member ...` extensions
* let-bound functions vs static methods vs instance methods
* operator overloads vs let-bound operators
* curried functions vs multi-parameter functions
* modules vs static classes
* `exception MyError of string` vs `type MyErrorException(msg) inherit Exception(msg)...`
* polymorphic data: interface vs abstract class vs discriminated union
* Async vs Task
* seq { ... } computation expression vs chain of Seq module operations vs. LINQ methods
* Option vs Nullable vs Result
* Statically resolved generic vs runtime generic (`^a` vs `'a`)
* `for i = 0 to 10` vs `for i in 0..10`
* `upcast` vs `:>` and `downcast` vs `:?>`
* `function` vs `fun x -> match x with`
* .fsi files and the syntax for declarations in them
* `let mutable` and `<-` vs `ref` and `:=`
* sprintf vs interpolated strings with "%d"-style format specifiers vs interpolated strings with FormattableString format specifiers vs String.Format
* Code quotations vs linq-style Expression<Func<...,...>>
I am very comfortable with F# today and feel I have a solid grasp on how I like to do things. But when I was introduced to it, I was a little overwhelmed, even though I already had familiarity with C# and with Haskell.
* let
* discriminated unions
* records
* lists
* seq
* async
* fun
Like all languages people actually use, F# has a long tail of advanced features!Then later learn F# because it's absolutely kick ass :)