[Perl5-syntax] How to test for a role in a method signature

Piers Cawley pdcawley at bofh.org.uk
Fri Mar 4 11:06:32 GMT 2011


On Fri, Mar 4, 2011 at 10:29 AM, Reverend Chip <rev.chip at gmail.com> wrote:
> On 3/4/2011 1:57 AM, Piers Cawley wrote:
>> On Fri, Mar 4, 2011 at 7:16 AM, Reverend Chip <rev.chip at gmail.com> wrote:
>>> On 3/3/2011 10:32 PM, Piers Cawley wrote:
>>>> Personally, I prefer the flow of 'Typed $parameter does coerce', where
>>>> the constraint declaration is always to the left of the parameter name
>>>> and the right hand side is for declaring stuff about how the parameter
>>>> is initialized. I would encourage anyone wanting to constrain by type
>>>> to declare a type along the lines of "subtype DoesRole, as role_type
>>>> 'Role'" ...
>>> No, I don't buy it.  The "isa" and "does" tests are so fundamental and
>>> common that forcing people to type that much to get the test would
>>> violate Huffman.
>> That's why I think that the better solution is to delegate to the
>> package to find out if a particular value satisfies it. If the package
>> is a class, then obviously it does an 'isa' test, if a role, then it
>> does a 'does' check and, if a type constraint, it uses the type's
>> constraints.
>
> And for combining?  You only get one name to the left.

If you _really_ want to ensure that a parameter isa Foo and also does
Bar then you need to rethink your architecture. Or hide the pain, bite
the bullet and make a custom type.

Easy things should be easy. Hard things should be possible. Stupid
things should be discouraged.



More information about the Perl5-syntax mailing list