NAME

Type::Libraries - bundle up multiple type constraint libraries

SYNOPSIS

package Contact {
   use Moo;
   use MooX::late;
   
   use Type::Libraries [qw(
      Types::Standard
      MooseX::Types::Common::Numeric
      MouseX::Types::URI
   )], qw( ArrayRef NegativeInt PositiveInt Uri );
   
   has house_number => (
      is     => 'ro',
      isa    => PositiveInt->plus_coercions(NegativeInt, '-$_'),
      coerce => 1,
   );
   
   has websites => (
      is     => 'ro',
      isa    => ArrayRef[Uri],
      coerce => 1,
   );
}

DESCRIPTION

Type::Libraries allows you to import type constraints from multiple type constraint libraries in a single use statement.

Whatsmore, it wraps type constraints using Type::Tiny to ensure that the imported type constraint keywords will work in Moose-, Moo-, and Mouse-based classes and roles. Yes, that's right: you can use MooseX::Types libraries in Moo; MouseX::Types libraries in Moose and so on.

Using Type::Libraries in classes and roles

The example in the "SYNOPSIS" demonstrates how to use Type::Libraries in your class or role. (The example uses the MooX::late extension for Moo to enable coerce => 1 to work. Without this extension, Moo coercions need to be a coderef, but it by no means necessary to use MooX::late if you're using Type::Libraries.)

The basic syntax for importing types is:

use Type::Libraries \@libraries, @types;

For further information, see:

Using Type::Libraries to create a union type library

You can also use Type::Libraries to create your own type constraint library which is the union of several pre-existing one:

package MyTypes {
   use Type::Libraries;
   Type::Libraries->setup_class(
      __PACKAGE__,   # me
      qw(
         Types::Standard
         MooseX::Types::Common::Numeric
         MouseX::Types::URI
      ),
   );
}

Your union type library can then be imported from:

use MyTypes qw( ArrayRef NegativeInt PositiveInt Uri );

BUGS

Please report any bugs to http://rt.cpan.org/Dist/Display.html?Queue=Type-Libraries.

SEE ALSO

MooseX::Types::Combine is similar, but only supports MooseX::Types libraries.

AUTHOR

Toby Inkster <tobyink@cpan.org>.

COPYRIGHT AND LICENCE

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