Re: Coercions and custom type parameters

[email protected] (Yuval Kogman)
Newsgroups perl.moose
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.