use MooseX::Declare class MyCollection { has 'items' => ( is => 'rw', isa => 'HashRef[Object]', traits => ['Hash'], defaults => sub { {} } ) some..methods } use MooseX::Declare; class Child { has 'name' => ( is => 'rw', isa => 'Str' ); some..methods } use MooseX::Declare; use MyCollection class Parent { has 'children => ( is => 'rw', isa => 'MyCollection' ) some..methods } #### subtype 'MyChildrenCollection' => as 'Collection', where => { $_->isa('Child') } #### has 'children' => (is => 'rw', 'isa' => 'MyChildrenCollection'