member_at starting to work
[scpubgit/DX.git] / lib / DX / Role / Predicate.pm
CommitLineData
9d759b64 1package DX::Role::Predicate;
2
3use List::Util qw(reduce);
4use DX::Utils qw(step);
5use DX::Role;
6
7sub resolution_step_for {
8 my ($self, @args) = @_;
9 my ($last, @rest) = reverse $self->_possible_resolution_list(@args);
10 return undef unless $last;
11 my $targ = $last;
12 $targ = $_->but_with_alternative_step($targ) for @rest;
13 return $targ;
14}
15
16sub _make_equal {
17 my ($self, $left, $right) = @_;
18 if ($left->equals($right)) {
19 return step(
20 actions => [],
21 depends_on => [ $left, $right ],
22 );
23 }
24 return (
25 do {
26 if ($left->is_set and my $set = $right->action_for_set_value($left)) {
27 step(
28 actions => [ $set ],
0498469a 29 depends_on => [
30 [ $right =>
31 [ $left ], [ $right ]
32 ]
33 ]
9d759b64 34 )
35 } else {
36 ()
37 }
38 },
39 do {
40 if ($right->is_set and my $set = $left->action_for_set_value($right)) {
41 step(
42 actions => [ $set ],
0498469a 43 depends_on => [
44 [ $left =>
45 [ $left ], [ $right ]
46 ]
47 ]
9d759b64 48 )
49 } else {
50 ()
51 }
52 },
53 );
54}
55
56sub selection_depends_on {
57 my ($self, @args) = @_;
58 \@args;
59}
60
611;