Visitors are generated like this:
class Visitor:
@abstractmethod
def _variant_a(self, variant_a: "VariantA") -> Any:
pass
@abstractmethod
def _variant_b(self, variant_b: "VariantB") -> Any:
pass
It feels possible to define something like:
class Visitor(Generic[T]):
@abstractmethod
def _variant_a(self, variant_a: "VariantA") -> T:
pass
@abstractmethod
def _variant_b(self, variant_b: "VariantB") -> T:
pass
and also potentially make it backwards compatible.