Build your own type constraints
package Time;
use Moose;
use Moose::Util::TypeConstraints;
use DateTime;
subtype 'DateTime' => as Object => where { $_->isa('DateTime') };
has 'time' => (
is => 'ro',
isa => 'DateTime',
default => sub {
DateTime->now();
}
);
Then use it:
package main; my $d = Time->new(); print $d->time()->mdy;