I would hesitate to call polymorphic variants &quot;part of the OO infrastructure&quot;.  They are really orthogonal to OO, but they do make OO less necessary.  Ironically, OCaml has a really nice OO system but it&#x27;s rarely used because with modules and functors there is little need for it.  Put differently, a lot of the conventional use for OO is as a poor man&#x27;s module system, and when you have a really good module system, you only use OO when you absolutely need the OO kind of polymorphism, and those cases are surprisingly rare (like existential types in Haskell).