What we do need is some way of bundling a bunch of traits together under a simple name.
Yes, yes, yes.
Defining a Class for this is also overkill.
Ye.. well, no. Why?
So instead of saying:
my %pet is Hash of Array of Array of Hash of Array of Cat; sub feed (%cats is Hash of Array of Array of Hash of Array of Cat) {...} You could say
trait cat_table is Hash of Array of Array of Hash of Array of Cat; my cat_table %pet; sub feed (cat_table %cats) {...}
I think classes are not necessarily the heavyweights some people might expect them to be... I think of them more as types, actually. Basically, if you replaced the word 'trait' with 'class', I think the current plan is that you can do exactly what you're suggesting:
class CatTable is Hash of Array of Array of Hash of Array of Cat;
my %pet is CatTable; sub feed (%cats is CatTable);
(note I fixed the last lines to use the right syntax... before, you were actually saying that %pet was a Hash of CatTables...)
MikeL