The following is from a ScalaZ document when I am learning about subtype polymorph in Scala.
scala> trait Plus[A] {
def plus(a2: A): A
}
defined trait Plus
scala> def plus[A <: Plus[A]](a1: A, a2: A): A = a1.plus(a2)
plus: [A <: Plus[A]](a1: A, a2: A)A
I do not follow the part A <: Plus[A]
. What is the intuition behind? In particular, the same A appears there, making me quite confused.