I agree that the underlying runtime and ecosystem affect the "feel" of programming in a given language a lot, but the comment above was specifically referring to the snippet of F# in the blog post, which could be trivially translated into OCaml.
AFAIK the main differences around the runtime are that the CLR has true concurrency and access to more libraries without using FFI, while OCaml is able to produce very tiny executables (~200kb) if you use the native compiler.
From my research, it looks like F# does not have structural typing (since it uses the .net type system). Does this mean you can't use constraints on types, like make a type with a range (0.0-1.0) or a type from an enum (man|woman|child)?
These kinds of type constraints are one of my favorite things about Haskell, and one of the reasons I'm really interested (in another language category) in Ada -- you can actually model real-life things using the type system.
F# uses nominal typing - that's another difference between it and Caml.
That said, F# will let you do the things you listed - one can be handled with traditional OOP techniques, and the other is handled by discriminated unions. Structural typing is a bit different from what you're describing - it's more a kind of compile-time duck typing.
I actually think F#'s switch to nominative typing is a big improvement over its Caml roots. When I'm trying to build out a type system that's meant to use type checks to enforce sanity, I want to have explicit control over when and where types are considered to be equivalent. Just because the types foo and bar implement members with similar signatures does not mean that they carry the same semantics.
Therefore, IMO having the language try to be clever and jump to the conclusion that anything that looks like a duck must be a duck is a hindrance to type safety. It's also a bit of a maintainability hassle: Having a formal type definition for each equivalence class makes it easier to find which types need to be modified accordingly when an equivalence class's definition changes.
AFAIK the main differences around the runtime are that the CLR has true concurrency and access to more libraries without using FFI, while OCaml is able to produce very tiny executables (~200kb) if you use the native compiler.