title: Why do case classes extend only Product and not Product1, Product2, ..., ProductN?
body: <p>after I learned that case classes extend Product, I wondered why they do not extend ProductN. E.g., given a code like:</p>
  
  <pre><code>case class Foo(a: Int)
  </code></pre>
  
  <p>I'd expect <code>Foo(1).asInstanceOf[Product1[Int]]</code> to work, but it does not (checked with Scala 2.9.1, and confirmed by other sources and by <code>Product</code> documentation).</p>
  
  <p>I was interested in this, because I wanted to declare classes such as:</p>
  
  <pre><code>abstract class UnaryOp[T1 &lt;: Exp[_], R](t1: T1) extends Exp[R] {
    this: Product1[T1] =&gt;
  }
  </code></pre>
  
  <p>This way, a node for a Unary operation must be implement Product1. It would be nice if being simply a case class with one parameter would be enough for this.</p>