Type::Tiny::Manual - an overview of Type::Tiny
Type::Tiny is a small framework for writing type constraints and organizing them into type libraries. Although inspired by Moose's type constraint API, it has no non-core dependencies, and can be used with Moose, Mouse and Moo.
It provides a small Moose-inspired library of built-in type constraints.
Type::Tiny is similar in aim to Specio. The major differences are that Type::Tiny is "tiny"; and Type::Tiny dispenses with the idea of a type registry and stringy access to type constraints.
Type::Tiny is faster and supports coercions.
Type::Tiny type constraints are designed as immutable objects. Once you've created a constraint, rather than modifying it you generally create child constraints to do what you need.
Type::Coercion objects, on the other hand, are mutable. Coercion routines can be added at any time during the object's lifetime.
This combination of features means that if you create a Type::Tiny type constraint,
then create a Moose or Mouse type from it (the
mouse_type lazily built attributes),
and then add coercions to the Type::Tiny constraint,
the Moose/Mouse constraint will not see them.
In general you should avoid adding coercions to a type constraint once the type constraint has started being used.
Add coercions straight after defining the type.
plus_coercions method (which returns a new type constraint with extra coercions,
so doesn't violate immutability) is a better technique than adding coercions willy-nilly during the course of a constraint's lifetime.
I do consider this to be an issue that needs resolving in a future release.
The likely solution will be to have the ability to "freeze" a Type::Coercion object,
and then change the
mouse_type lazy builders to make them automatically freeze the type's associated coercion.
Toby Inkster <email@example.com>.
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.
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.