I have a self-recursive type:
trait Problem[P <: Problem[P]] {
type Solution
}
Now, I want to pattern match on P#Solution
. Let's assume we're within the case class Foo[P <: Problem[P]]()
:
case ExampleCaseClass(s: P#Solution) if conditionApplies() =>
// do sth
case ExampleCaseClass(s: P#Solution) =>
// now sth else
Of course it fails due to type erasure. Is there any way to make that code compile in scala?
I've seen class/type tags but I'm not really sure if they can be use in such case.
You can indeed use type tags, but you need a concrete type to obtain the type tag from. You could add the solution type as type parameter:
If you want a subtype match, use
<:<
instead of=:=
.