On Fri, Apr 24, 2009 at 05:02:35PM +0100, Mark Morgan wrote: > A very limited functionality, which won't be extended any further. It > seems to me the ideal candidate for handling as parameterized roles, > as described earlier in the thread, in order to get common behaviour > out of an oft-repeated idiom.
Getting "common behavior out of an oft-repeated idiom" is just refactoring, generically, not something specific to parameterized roles. The fact that you won't extend it any further makes me think that a simple wrapper around has() is all you need. package YourApp::Attrs; use strict; use warnings; use Moose (); use Moose::Exporter; Moose::Exporter->setup_import_methods( with_caller => [ 'boolean_filter' ], ); sub boolean_filter { my ($caller, $name, %options) = @_; Moose::Meta::Class->initialize($caller)->add_attribute( $name, is => 'ro', isa => 'Bool', predicate => "has_$name", %options, ); } package YourApp::SomeModule; use Moose; use YourApp::Attrs; boolean_filter($_) for qw(hello goodbye); See Moose::Exporter. (MooseX::Attributes::Curried *almost* does this, but the predicate isn't currently possible using it; Sartak, any good ideas?) Anyway, your example was, I think, slimmed down to the point where I couldn't see where you planned to use this, but if all you need is an accessor generator, a role isn't the right concept. hdp.