use v5.16; package MyClass { use Moose; use Types::Standard qw(Object Int); use Type::Params qw(compile); my $EvenInt = Int->where(sub { $_ % 2 == 0 }); has even_number => ( is => 'ro', isa => $EvenInt, writer => '_set_even_number', ); sub add_another_even { state $check = compile(Object, $EvenInt); my ($self, $n) = &$check; $self->_set_even_number( $self->even_number + $n ); return $self; } }