object Temp{ abstract class A object B{ private case class B_inner extends A def apply: A = B_inner() def unapply(a: A) = a match { case B_inner() => true case _ => false } } B() match { case B() => Console.println("match") } }