The thing is, I don&#x27;t see anything actually restricting the scope of discussion to subtype polymorphism.<p><i>&quot;The more I code, the more it feels like type classes are never not a good answer.&quot;</i><p>As they are used in Haskell, they sometimes get awkward where you where multiple instances are relevant to the same data in the same scope.  You can newtype cast around, but I&#x27;ve been wondering (with multiparameter typeclasses) if reifying the instance we care about is 1) useful, and 2) actually still distinct from explicitly passing the dictionary as a record.  Regarding 1, I&#x27;ve consistently leaned &quot;yes&quot;, although without tremendous confidence.  Regarding 2, I&#x27;ve gone back and forth over time.