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:

    *   Type::Tiny::Manual::UsingWithMoose

    *   Type::Tiny::Manual::UsingWithMoo

    *   Type::Tiny::Manual::UsingWithMouse

    *   Type::Tiny::Manual::UsingWithOther

  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.

