Hm, after re-reading a couple times, I think I merely misinterpreted how you said &quot;OCaml supports parametric polymorphism&quot; and &quot;Haskell supports ad-hoc polymorphism.&quot; Based on your wording I thought you were saying that Haskell only supports ad-hoc polymorphism and OCaml only supports parametric polymorphism. Surely there was something in my head at 2am that made me think you were off in your description, but I don&#x27;t know what it was. Sorry! I would edit it if I could.<p>EDIT: I think the line that stood out to me as being odd was &quot;That&#x27;s why OCaml has more than one print function, and why it has integer and floating point versions of operators like + and *.&quot; which was after you explained what parametric polymorphism was. So my interpretation was &quot;OCaml supports parametric polymorphism, which is why there are multiple addition functions for different types.&quot; Of course, the real reason isn&#x27;t due to supporting parametric polymorphism, but specifically because OCaml lacks support for ad-hoc polymorphism.<p>Interestingly, OCaml does have sort of pseudo-ad-hoc polymorphic implementations for comparison operators.<p>val (&lt;) : &#x27;a -&gt; &#x27;a -&gt; bool = &lt;fun&gt;<p>But this is a wonderfully hacky implementation.