1 package DX::Role::Predicate;
3 use List::Util qw(reduce);
4 use DX::Utils qw(step CONTENTS_OF);
7 sub resolution_step_for {
8 my ($self, $prop, @args) = @_;
9 my ($last, @rest) = reverse $self->_possible_resolution_list(@args);
10 return undef unless $last;
11 my $targ = $last->but(resolves => $prop);
13 alternative_step => $targ,
20 my ($self, $left, $right) = @_;
21 if ($left->equals($right)) {
25 [ undef ,=> [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ] ]
31 if ($left->is_set and my $set = $right->action_for_set_value($left)) {
36 [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ]
45 if ($right->is_set and my $set = $left->action_for_set_value($right)) {
50 [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ]
61 sub selection_depends_on {
62 my ($self, @args) = @_;