use MyApp::Zoo (); my $lenny = MyApp::Zoo->new_shark(name => 'Lenny'); $lenny->isa('MyApp::Zoo::Shark'); # true $lenny->isa('MyApp::Zoo::Fish'); # true $lenny->isa('MyApp::Zoo::Animal'); # true $lenny->does('MyApp::Zoo::Aquatic'); # true $lenny->can('swim'); # true package MyApp::Zoo::Enclosure::Tank { use Moo; use Types::Standard qw(ArrayRef); use MyApp::Zoo::Types qw(Aquatic); has animals => ( is => 'rw', isa => ArrayRef[Aquatic], ); } my $tank = MyApp::Zoo::Enclosure::Tank->new( animals => [ $lenny ], );