Scala - Covariance
<p>According to covariance definition: </p>

<blockquote>
  <p>Q[+B] means that Q can take any class, but if A is a subclass of B,
  then Q[A] is considered to be a subclass of Q[B].</p>
</blockquote>

<p>Let's see the following example:</p>

<pre><code>trait SomeA
trait SomeB extends SomeA
trait SomeC extends SomeB

case class List1[+B](elements: B*) 

val a = List1[SomeA](new SomeA{},new SomeB{})
val b = List1[SomeB](new SomeB{},new SomeC{})
</code></pre>

<p>Everything is fine, but I don't see why <code>List1[SomeB]</code> is a subclass of <code>List1[SomeA]</code>, or in other words why b is a subclass of <code>a</code>?</p>