\x89\x50\x4E\x47\x0D\x0A\x1A\x0A PNG  \x89\x50\x4E\x47\x0D\x0A\x1A\x0A =pod =encoding utf-8 =head1 NAME Type::Tiny::Manual::UsingWithMouse - how to use Type::Tiny and Type::Library with Mouse =head1 SYNOPSIS { package Person; use Mouse; use Types::Standard qw( Str Int ); has name => ( is => "ro", isa => Str, ); my $PositiveInt = Int -> where( sub { $_ > 0 } ) -> plus_coercions( Int, sub { abs $_ } ); has age => ( is => "ro", isa => $PositiveInt, coerce => 1, writer => "_set_age", ); sub get_older { my $self = shift; my ($years) = @_; $PositiveInt->assert_valid($years); $self->_set_age($self->age + $years); } } =head1 STATUS L support in Type::Tiny was somewhat of an afterthought. It should work, but is not anywhere near as well-tested as L or L support. =head1 DESCRIPTION Type::Tiny is tested with L 1.00 and above. L type constraints have an API almost identical to that of L. As a result, you can use a Type::Tiny object pretty much anywhere you'd use a Mouse::Meta::TypeConstraint and you are unlikely to notice the difference. (And Mouse is unlikely to notice the difference too!) =head2 Per-Attribute Coercions Type::Tiny offers convenience methods to alter the list of coercions associated with a type constraint. Let's imagine we wish to allow our C attribute to be coerced from an arrayref of strings. has name => ( is => "ro", isa => Str->plus_coercions( ArrayRef[Str], sub { join " ", @{$_} }, ), coerce => 1, ); This coercion will apply to the C attribute only; other attributes using the C type constraint will be unaffected. See the documentation for C, C and C in L. =head2 Optimization Mouse's built-in type constraints are implemented using XS and are stupidly fast. For many type constraints, if Type::Tiny notices Mouse is loaded early enough, Type::Tiny will borrow Mouse's XS subs. See also L. =head2 Interactions with MouseX-Types Type::Tiny and MouseX::Types type constraints should "play nice". If, for example, C is taken from L (i.e. a Type::Tiny-based type library), and C is taken from L, then the following should "just work": isa => ArrayRef[ PositiveInt ] isa => PositiveInt | ArrayRef =head1 SEE ALSO For examples using Type::Tiny with L see the SYNOPSIS sections of L and L, and the L, and L in the test suite. =head1 AUTHOR Toby Inkster Etobyink@cpan.orgE. =head1 COPYRIGHT AND LICENCE This software is copyright (c) 2013-2014, 2017-2019 by Toby Inkster. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =head1 DISCLAIMER OF WARRANTIES THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. =cut