после того, как я узнал, что классы case расширяют Product, я задавался вопросом, почему они не распространяют ProductN. Например, с учетом кода типа:
case class Foo(a: Int)
Я ожидаю, что Foo(1).asInstanceOf[Product1[Int]]
будет работать, но это не так (отмечено с помощью Scala 2.9.1 и подтверждено другими источниками и документацией Product
).
Мне это было интересно, потому что я хотел объявить классы, например:
abstract class UnaryOp[T1 <: Exp[_], R](t1: T1) extends Exp[R] {
this: Product1[T1] =>
}
Таким образом, node для унарной операции должен быть реализован Product1. Было бы неплохо, если бы для этого было просто класс case с одним параметром.