I hate to keep coming back to this, but I'm unsettled and unemployed, so I might as well keep at it until I feel like I've got it right.
We've been talking about the roles that AH provides as being "Perl5" or "Native", but they're really not -- some of them are (Str) but some of them aren't (Counter, Bool, ImmutableHash, etc.). It doesn't even match up exactly with Moose's builtin types, so "Moose" isn't a good name either. It's a collection of common, simple data types. I can't think of a good name for this. (And it's not even correct -- Counter is very useful, but isn't really a "data structure" so much as it is a common code pattern.) The fact that the underlying data structures are normal Perl hashes, arrays, scalars, etc. is also not something we really want to draw attention to; after all, the whole point is that you use $self->push_things instead of push @{$self->things}, so that consumers of your API don't hardcode that sort of thing. In the end of I'm not saying much different than I have before: what is the most precise way to distinguish these particular attribute traits from other traits? I also keep coming back to something Dave said, along the lines of "well, if these values actually had methods, we'd just delegate to them instead of special-casing it", and wondering how much work it would take to solve auto- or manual boxing in a way that people would like. I don't want to be distracted by that and end up with nothing to show for the hackathon work that we did on AH, though. hdp.