1Type::Tiny::Manual::UsiUnsgeWritChoMnotursieb(u3t)ed PerTlypDeo:c:uTmiennyt:a:tMiaonnual::UsingWithMouse(3)
2
3
4

NAME

6       Type::Tiny::Manual::UsingWithMouse - how to use Type::Tiny and
7       Type::Library with Mouse
8

SYNOPSIS

10          {
11             package Person;
12
13             use Mouse;
14             use Types::Standard qw( Str Int );
15
16             has name => (
17                is      => "ro",
18                isa     => Str,
19             );
20
21             my $PositiveInt = Int
22                -> where( sub { $_ > 0 } )
23                -> plus_coercions( Int, sub { abs $_ } );
24
25             has age => (
26                is      => "ro",
27                isa     => $PositiveInt,
28                coerce  => 1,
29                writer  => "_set_age",
30             );
31
32             sub get_older {
33                my $self = shift;
34                my ($years) = @_;
35                $PositiveInt->assert_valid($years);
36                $self->_set_age($self->age + $years);
37             }
38          }
39

STATUS

41       Mouse support in Type::Tiny was somewhat of an afterthought. It should
42       work, but is not anywhere near as well-tested as Moo or Moose support.
43

DESCRIPTION

45       Type::Tiny is tested with Mouse 1.00 and above.
46
47       Type::Tiny type constraints have an API almost identical to that of
48       Mouse::Meta::TypeConstraint. As a result, you can use a Type::Tiny
49       object pretty much anywhere you'd use a Mouse::Meta::TypeConstraint and
50       you are unlikely to notice the difference. (And Mouse is unlikely to
51       notice the difference too!)
52
53   Per-Attribute Coercions
54       Type::Tiny offers convenience methods to alter the list of coercions
55       associated with a type constraint. Let's imagine we wish to allow our
56       "name" attribute to be coerced from an arrayref of strings.
57
58             has name => (
59                is      => "ro",
60                isa     => Str->plus_coercions(
61                   ArrayRef[Str], sub { join " ", @{$_} },
62                ),
63                coerce  => 1,
64             );
65
66       This coercion will apply to the "name" attribute only; other attributes
67       using the "Str" type constraint will be unaffected.
68
69       See the documentation for "plus_coercions", "minus_coercions" and
70       "no_coercions" in Type::Tiny.
71
72   Optimization
73       Mouse's built-in type constraints are implemented using XS and are
74       stupidly fast. For many type constraints, if Type::Tiny notices Mouse
75       is loaded early enough, Type::Tiny will borrow Mouse's XS subs.
76
77       See also Type::Tiny::Manual::Optimization.
78
79   Interactions with MouseX-Types
80       Type::Tiny and MouseX::Types type constraints should "play nice". If,
81       for example, "ArrayRef" is taken from Types::Standard (i.e. a
82       Type::Tiny-based type library), and "PositiveInt" is taken from
83       MouseX::Types::Common::Numeric, then the following should "just work":
84
85          isa => ArrayRef[ PositiveInt ]
86
87          isa => PositiveInt | ArrayRef
88

SEE ALSO

90       For examples using Type::Tiny with Mouse see the SYNOPSIS sections of
91       Type::Tiny and Type::Library, and the Mouse integration tests
92       <https://github.com/tobyink/p5-type-
93       tiny/tree/master/t/30-integration/Mouse>, and MouseX-Types integration
94       tests <https://github.com/tobyink/p5-type-
95       tiny/tree/master/t/30-integration/MouseX-Types> in the test suite.
96

AUTHOR

98       Toby Inkster <tobyink@cpan.org>.
99
101       This software is copyright (c) 2013-2014, 2017-2019 by Toby Inkster.
102
103       This is free software; you can redistribute it and/or modify it under
104       the same terms as the Perl 5 programming language system itself.
105

DISCLAIMER OF WARRANTIES

107       THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
108       WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
109       MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
110
111
112
113perl v5.30.0                      2019-07-T2y6pe::Tiny::Manual::UsingWithMouse(3)
Impressum