Why Does F# Rely On Ref Type Wrappers?

It’s primarily legacy, but the other thing to keep in mind is that the large majority of types in .NET are reference types and the runtime was built to handle them well. For certain situations, like a struct wrapper for domain modeling (e.g., single-case DU) they’re always better, but very often performance characteristics depend on enough factors to make it not always obvious that a struct is a better choice.