phpMan > man > Type::Tiny::Manual

Markdown | JSON | MCP    

NAME
    Type::Tiny::Manual - an overview of Type::Tiny

SYNOPSIS
    Type::Tiny is a small Perl <http://www.perl.org/> class for writing type constraints, inspired
    by Moose's type constraint API and MooseX::Types. It has only one non-core dependency (and even
    that is simply a module that was previously distributed as part of Type::Tiny but has since been
    spun off), and can be used with Moose, Mouse, or Moo (or none of the above).

    Type::Tiny is used by over 800 Perl distributions on the CPAN (Comprehensive Perl Archive
    Network) and can be considered a stable and mature framework for efficiently and reliably
    enforcing data types.

    Type::Tiny is bundled with Type::Library a framework for organizing type constraints into
    collections. Also bundled is Types::Standard, a Moose-inspired library of useful type
    constraints. Type::Params is also provided, to allow very fast checking and coercion of function
    and method parameters.

    The following example gives you an idea of some of the features of these modules. If you don't
    understand it all, that's fine; that's what the rest of the manual is for. Although the example
    uses Moo, the "use Moo" could be changed to "use Moose" or "use Mouse" and it would still work.

     use v5.12;
     use strict;
     use warnings;

     package Horse {
       use Moo;
       use Types::Standard qw( Str Int Enum ArrayRef InstanceOf );
       use Type::Params qw( compile );
       use namespace::autoclean;

       has name => (
         is       => 'ro',
         isa      => Str,
         required => 1,
       );
       has gender => (
         is       => 'ro',
         isa      => Enum[qw( f m )],
       );
       has age => (
         is       => 'rw',
         isa      => Int->where( '$_ >= 0' ),
       );
       has children => (
         is       => 'ro',
         isa      => ArrayRef[ InstanceOf['Horse'] ],
         default  => sub { return [] },
       );

       sub add_child {
         # method signature
         state $check = compile( InstanceOf['Horse'], InstanceOf['Horse'] );

         my ($self, $child) = $check->(@_);   # unpack @_
         push @{ $self->children }, $child;

         return $self;
       }
     }

     package main;

     my $boldruler = Horse->new(
       name    => "Bold Ruler",
       gender  => 'm',
       age     => 16,
     );

     my $secretariat = Horse->new(
       name    => "Secretariat",
       gender  => 'm',
       age     => 0,
     );

     $boldruler->add_child( $secretariat );

     use Types::Standard qw( is_Object assert_Object );

     # is_Object will return a boolean
     #
     if ( is_Object($boldruler) ) {
       say $boldruler->name;
     }

     # assert_Object will return $secretariat or die
     #
     say assert_Object($secretariat)->name;

MANUAL
    Even if you are using Type::Tiny with other object-oriented programming toolkits (such as Moose
    or Mouse), you should start with the Moo sections of the manual. Most of the information is
    directly transferrable and the Moose and Mouse sections of the manual list the minor differences
    between using Type::Tiny with Moo and with them.

    In general, this manual assumes you use Perl 5.12 or above and may use examples that do not work
    on older versions of Perl. Type::Tiny does work on earlier versions of Perl, but not all the
    examples and features in the manual will run without adjustment. (For instance, you may need to
    replace "state" variables with lexical variables, avoid the "package NAME { BLOCK }" syntax,
    etc.)

    *   Type::Tiny::Manual::Installation

        How to install Type::Tiny. If Type::Tiny is already installed, you can skip this.

    *   Type::Tiny::Manual::UsingWithMoo

        Basic use of Type::Tiny with Moo, including attribute type constraints, parameterized type
        constraints, coercions, and method parameter checking.

    *   Type::Tiny::Manual::UsingWithMoo2

        Advanced use of Type::Tiny with Moo, including unions and intersections, "stringifies_to",
        "numifies_to", "with_attribute_values", and "where".

    *   Type::Tiny::Manual::UsingWithMoo3

        There's more than one way to do it! Alternative ways of using Type::Tiny, including type
        registries, exported functions, and "dwim_type".

    *   Type::Tiny::Manual::Libraries

        Defining your own type libraries, including extending existing libraries, defining new
        types, adding coercions, defining parameterizable types, and the declarative style.

    *   Type::Tiny::Manual::UsingWithMoose

        How to use Type::Tiny with Moose, including the advantages of Type::Tiny over built-in type
        constraints, and Moose-specific features.

    *   Type::Tiny::Manual::UsingWithMouse

        How to use Type::Tiny with Mouse, including the advantages of Type::Tiny over built-in type
        constraints, and Mouse-specific features.

    *   Type::Tiny::Manual::UsingWithClassTiny

        Including how to Type::Tiny in your object's "BUILD" method, and third-party shims between
        Type::Tiny and Class::Tiny.

    *   Type::Tiny::Manual::UsingWithOther

        Using Type::Tiny with Class::InsideOut, Params::Check, and Object::Accessor.

    *   Type::Tiny::Manual::UsingWithTestMore

        Type::Tiny for test suites.

    *   Type::Tiny::Manual::Params

        Advanced information on Type::Params, and using Type::Tiny with other signature modules like
        Function::Parameters and Kavorka.

    *   Type::Tiny::Manual::NonOO

        Type::Tiny in non-object-oriented code.

    *   Type::Tiny::Manual::Optimization

        Squeeze the most out of your CPU.

    *   Type::Tiny::Manual::Coercions

        Advanced information on coercions.

    *   Type::Tiny::Manual::AllTypes

        An alphabetical list of all type constraints bundled with Type::Tiny.

    *   Type::Tiny::Manual::Policies

        Policies related to Type::Tiny development.

    *   Type::Tiny::Manual::Contributing

        Contributing to Type::Tiny development.

BUGS
    Please report any bugs to <https://github.com/tobyink/p5-type-tiny/issues>.

SEE ALSO
    The Type::Tiny homepage <https://typetiny.toby.ink/>.

AUTHOR
    Toby Inkster <tobyink AT cpan.org>.

COPYRIGHT AND LICENCE
    This software is copyright (c) 2013-2014, 2017-2021 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.

Type::Tiny::Manual
NAME SYNOPSIS MANUAL BUGS SEE ALSO AUTHOR COPYRIGHT AND LICENCE DISCLAIMER OF WARRANTIES

Generated by phpMan v3.7.7 Author: Che Dong Under GNU General Public License
2026-06-10 09:27 @216.73.217.62
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 TransitionalValid CSS!

^_back to top