member_at starting to work
[scpubgit/DX.git] / lib / DX / Role / Predicate.pm
1 package DX::Role::Predicate;
2
3 use List::Util qw(reduce);
4 use DX::Utils qw(step);
5 use DX::Role;
6
7 sub 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
16 sub _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 ],
29           depends_on => [
30             [ $right =>
31               [ $left ], [ $right ]
32             ]
33           ]
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 ],
43           depends_on => [
44             [ $left =>
45               [ $left ], [ $right ]
46             ]
47           ]
48         )
49       } else {
50         ()
51       }
52     },
53   );
54 }
55
56 sub selection_depends_on {
57   my ($self, @args) = @_;
58   \@args;
59 }
60
61 1;