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: 
As you can do exactly the same "manually" what the compiler does for case classes, and because the produced byte-code would be indistinguishable (is this even a word? looks funny...), you are out of luck. The real question is: Why should you care about?
In Java I've used

```
Product.class.isAssignableFrom(someClassThatMayBeACaseClass);

```

to detect if something is a case class. Though it's likely there are Products that are not case classes.