On Thu, Apr 15, 2010 at 1:20 PM, Sir Robert Burbridge
<rburb...@cisco.com> wrote:

>
> Ahh, thanks.  So typing is basically nomination of classes into a program's
> cosmology.  That's super helpful.
>
> Thanks again,

Types work on things other than classes as well. It's more of a way of
saying "This arrangement of Data is special. Here's a name for it."

For example you can define a type that has nothing to do with a class at all:

subtype PersonRecord => as HashRef => where { exists $_->{first_name}
&& exists $_->{last_name} };

This would match:  { first_name => 'Cory', last_name => 'Watson' }

but wouldn't match:

class Person::Record { has first  => ( accessor => 'first_name' ); has
last => ( accessor => 'last_name' ); }

...

This distinction becomes important when you get into things like
coercions. You can then say something like:

coerce 'Person::Record' => from PersonRecord => via {
Person::Record->new(first = $_->{first_name}, last => $_->{last_name})
};

and create objects from hashes with a minimum of fuss. There are also
things like MatchOnType in Moose::Util::TypeConstraints and other
tools that come into play once you have a good grasp of the Typing
system.

-Chris

Reply via email to