Question: I was wondering if there as a way to know if an object is an instance of a case class. I was trying to find some structural type matching `unapply`, I notice they inherit `Product`. My real need for a function that would go something like:

```
def withCaseClass[T <: /* matcher for case class */](obj:T) ...

```

My major interest is to make sure only case classes can be passed to this function.

Answer: 
A `case class` is an implementation detail. One can create a class that acts exactly like a case class -- and the ability to do so is a very important thing, as it ensures one *can* switch to a normal class if some particular requirement makes that a better choice.
There's no marker trait for either case classes or tuples, so I'm afraid your best bet might be to check that it extends Product and isn't in any package starting with "scala.\*". :/