I've been fighting with inheritance + generics in the past to implement layers of neural networks.
I think your example wouldn't work if a `Dog[Domestic]` and a `Cat[Domestic]` are stored in the same datastructure or if you use the value through a proc declared in another module. In the end, what I do is have the generic inherited objects carry their "handler" in a field to avoid `methods`.