in reply to Non-fatal error handling with Mouse types?

Use coercion.

use Types::Standard qw(Any Enum); has error_mode => ( is => 'rw', isa => (Enum[qw/carp error both/])->plus_coercions(Any, q{'both'} +), # default to 'both' coerce => 1, );

(Coercions can also be done with native Mouse types, but that requires more lines of code, and I can't remember how off the top of my head.)