Data classes should be able to inherit from each other

You still get to use inheritance (also of implementation) and it can do equality including the inherited fields. You basically get everything a data class does, spread over a parent and children except that the parent cannot be instantiated.