--- /dev/null
+package DX::Step::CompleteRecheck;
+
+use DX::Class;
+
+with 'DX::Role::Step';
+
+has was_recheck_for => (is => 'ro', required => 1);
+
+has original_search_state => (is => 'ro', required => 1);
+
+sub apply_to {
+ my ($self, $ss) = @_;
+
+ my $prop = $self->was_recheck_for;
+ my $re_ss = $self->original_search_state;
+ my $re_hyp = $re_ss->current_hypothesis;
+ my $re_rsp = $re_hyp->resolved_propositions;
+
+ my $rsp = $re_rsp->with_updated_dependencies_for(
+ $prop,
+ $ss->current_hypothesis
+ ->resolved_propositions
+ ->dependencies_for($prop)
+ );
+
+ return $re_ss->but(
+ current_hypothesis => $re_hyp->but(
+ resolved_propositions => $rsp
+ ),
+ is_solution_state => 1
+ );
+}
+
+1;
package DX::Step::EnterRecheck;
+use DX::Step::CompleteRecheck;
+
use DX::Class;
with 'DX::Role::Step';
),
is_solution_state => 0,
on_exhaustion_step => undef,
- on_solution_step => DX::Step::MarkAsSolution->new,
+ on_solution_step => DX::Step::CompleteRecheck->new(
+ original_search_state => $old_ss,
+ was_recheck_for => $prop,
+ ),
);
return $ss;
return undef;
}
- my $sol_rps = $sol_sp->current_hypothesis->resolved_propositions;
-
- my $old_hyp = $old_ss->current_hypothesis;
-
- my $rps = $old_hyp->resolved_propositions;
-
- $rps = $rps->with_updated_dependencies_for(
- $prop, $sol_rps->dependencies_for($prop)
- );
-
- trace 'step.recheck.done' => 'yay';
-
- return $old_ss->but(
- current_hypothesis => $old_hyp->but(resolved_propositions => $rps),
- );
+ return $sol_sp->current_search_state->but(is_solution_state => 0);
}
1;