title: What is the difference between self-types and trait subclasses?
body: <p>A self-type for a trait <code>A</code>:</p>
  
  <pre><code>trait B
  trait A { this: B =&gt; }
  </code></pre>
  
  <p>says that <em>"<code>A</code> cannot be mixed into a concrete class that does not also extend <code>B</code>"</em>.</p>
  
  <p>On the other hand, the following:</p>
  
  <pre><code>trait B
  trait A extends B
  </code></pre>
  
  <p>says that <em>"any (concrete or abstract) class mixing in <code>A</code> will also be mixing in B"</em>.</p>
  
  <p>Don't these two statements mean the same thing? The self-type seems to serve only to create the possibility of a simple compile-time error.</p>
  
  <p>What am I missing?</p>