Yes. My aim was to remove circular dependencies. It's fine for `Mixture` to expose a typedef for the `Shared` type it's built on, but it would be odd for `Shared` to expose a `Mixture` typedef in the same way it would be weird for an arbitrary type to typedef its own `std::vector/map/etc` containers. In loom, this is mostly seamless because everything builds on `Mixture`. In tardis, I provide a simple compmodel wrapper that gives the typedef structure it expects (typedefs for group, scorer, etc off the shared class), but I expect loom's usage pattern will be more typical.