On Thu, Jul 24, 2008 at 16:16:28 -0400, Charles Alderman wrote: > I guess that if you're trying to prevent this as an action at a distance, > 'deep_coerce' wouldn't really be acceptable either. Wouldn't that just be > a more explicit warning of an action at a distance?
Declaring an attribute with a parameterized type: has foo => ( isa => "ArrayRef[Foo]", coerce => 1, ); has a specific behavior right now, it enables only the coercions on the type "ArrayRef[Foo]". If this started coercing using 'Foo's coercions we break compatibility, and deining a coercion on 'Foo' affects types that parametrize on it. deep_coerce is different because: a. it doesn't break existing code b. it's explicit about the fact that it's accepting coercions from the type parameter, so a developer would know to look there, instead of looking for coercions on 'ArrayRef[Foo]'. > If moose type constraints become too complicated, I guess at some point, a > designer/developer just needs to turn the parametrized type into its own > class. So, maybe I'm answering my own question here. Custom parametrized types could still make sense though: MyCustomType[Foo] is a useful construct for custom container types, for functors, etc etc, so deep_coerce *is* a useful property to have > At any rate, I'll look more at the mailing list archives... I think this was only discussed on IRC actually -- Yuval Kogman <[EMAIL PROTECTED]> http://nothingmuch.woobling.org 0xEBD27418