class A { sealed trait Foo } object a1 extends A { case class Foo1(i: Int) extends Foo } object a2 extends A { case class Foo2(i: Int) extends Foo } class B { def mthd(foo: a2.Foo) = { foo match { case a2.Foo2(i) => i // Note: This case is impossible. In fact, scalac // will (correctly) report an error if it is uncommented, // but a warning if it is commented. // case a1.Foo1(i) => i } } }