<p>Oleg Kiselyov and Ralf Lämmel's <a href="https://arxiv.org/pdf/cs/0509027v1.pdf" rel="nofollow noreferrer">"Haskell's overlooked object system"</a> proposes a library for Haskell that implements an object system using Haskell's existing features, including type classes.</p>

<p>An excerpt from the "introduction" section of the paper (emphasis mine):</p>

<blockquote>
  <p>The interest in this topic is not at all restricted to Haskell researchers and practitioners since there is a fundamental and unsettled question — a question that is addressed in the present paper:</p>
  
  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>What is the relation between type-class-bounded and subtype polymorphism?</strong></p>
  
  <p>In this research context, we speciﬁcally (and emphatically) restrict ourselves to the
  existing Haskell language (Haskell 98 and common extensions where necessary),
  i.e., no new Haskell extensions are to be proposed. <strong>As we will substantiate, this
  restriction is adequate, as it allows us to deliver a meaningful and momentous answer to the aforementioned question.</strong></p>
</blockquote>
Generics and Constrained Polymorphism versus Subtyping
<p>In this <a href="http://research.microsoft.com/en-us/um/people/simonpj/papers/haskell-retrospective/ECOOP-July09.pdf" rel="noreferrer">PDF presentation</a> on Haskell Type Classes,  slide #54 has this question:</p>

<blockquote>
  <p><strong>Open Question</strong>:</p>
  
  <p>In a language with generics and
  constrained polymorphism, do you need
  subtyping too?</p>
</blockquote>

<p>My questions are:</p>

<ol>
<li><p>How do generics and constrained polymorphism make subtyping unnecessary?</p></li>
<li><p>If generics and constrained polymorphism make subtyping unnecessary, why does Scala have subtyping?</p></li>
</ol>