Что с этим не так?
def m(a: A) = a match {
case b: B => print("B")
case c: C => print("C")
}
Я спрашиваю только потому, что вы не просили больше функциональности, чем эта.
РЕДАКТИРОВАТЬ
Это может помочь:
object Dog {
def apply(name: String)(size: Int) = new Dog(name)(size)
def unapply(dog: Dog) = Some(dog.name, dog.size)
}
class Dog(val name: String)(var size: Int)
Теперь вы можете создавать собак так:
new Dog("Snoopy")(10)
или вот так:
Dog("Snoopy")(10)
Но когда вышаблон соответствия на собаках конструктор шаблон не карри.
Dog("Snoopy")(10) match {
case Dog(a, b) => // do sth with a or b
}