Toby Inkster > Type-Tiny > Type::Tiny::Manual::UsingWithMoo

Download:
Type-Tiny-0.044.tar.gz

Annotate this POD

Website

CPAN RT

Open  1
Stalled  1
View/Report Bugs
Source   Latest Release: Type-Tiny-0.045_03

NAME ^

Type::Tiny::Manual::UsingWithMoo - how to use Type::Tiny and Type::Library with Moo

SYNOPSIS ^

   {
      package Person;
      
      use Moo;
      use Types::Standard qw( Str Int );
      use Type::Utils qw( declare as where inline_as coerce from );
      
      has name => (
         is      => "ro",
         isa     => Str,
      );
      
      my $PositiveInt = declare
         as        Int,
         where     {  $_ > 0  },
         inline_as { "$_ =~ /^[0-9]\$/ and $_ > 0" };
      
      coerce $PositiveInt, from Int, q{ abs $_ };
      
      has age => (
         is      => "rwp",
         isa     => $PositiveInt,
         coerce  => $PositiveInt->coercion,
      );
      
      sub get_older {
         my $self = shift;
         my ($years) = @_;
         $PositiveInt->assert_valid($years);
         $self->_set_age($self->age + $years);
      }
   }

DESCRIPTION ^

Type::Tiny is tested with Moo 1.001000 and above.

Type::Tiny overloads &{}. Moo supports using objects that overload &{} as isa constraints, so Type::Tiny objects can directly be used in isa.

Moo doesn't support coerce => 1 but requires a coderef as a coercion. However, again it supports using objects that overload &{}, which Type::Coercion does, allowing coerce => $Type->coercion to work.

Type::Tiny hooks into Moo's HandleMoose interface to ensure that type constraints get inflated to Moose type constraints if and when Moo inflates your class to a full Moose class.

Optimization

The usual advice for optimizing type constraints applies: use type constraints which can be inlined whenever possible, and define coercions as strings rather than coderefs.

Upgrading to Moo 1.002000 or above should provide a slight increase in speed for type constraints, as it allows them to be inlined into accessors and constructors.

If creating your own type constraints using Type::Tiny->new, then consider using Sub::Quote to quote the coderef; this allows you to take advantage of inlining without having to write your own inlining routines.

SEE ALSO ^

For examples using Type::Tiny with Moo see the SYNOPSIS sections of Type::Tiny and Type::Library, and the Moo integration tests in the test suite.

AUTHOR ^

Toby Inkster <tobyink@cpan.org>.

COPYRIGHT AND LICENCE ^

This software is copyright (c) 2013-2014 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.

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.

syntax highlighting: