> I stand corrected, as monomorphization is optional for parametric polymorphism but mandatory for ad hoc polymorphism.
It's not mandatory for ad-hoc polymorphism. Haskell desugars ah-hoc polymorphism to dictionary passing (although it often does inlining to reduce the overhead of this).