title: What does this piece of Scala code that teaches subtype polymorphism mean?
body: <p>The following is from a ScalaZ document when I am learning about subtype polymorph in Scala. </p>
  
  <pre><code>scala&gt; trait Plus[A] {
           def plus(a2: A): A
         }
  defined trait Plus
  
  scala&gt; def plus[A &lt;: Plus[A]](a1: A, a2: A): A = a1.plus(a2)
  plus: [A &lt;: Plus[A]](a1: A, a2: A)A
  </code></pre>
  
  <p>I do not follow the part <code>A &lt;: Plus[A]</code>.  What is the intuition behind? In particular, the same A appears there, making me quite confused. </p>