package DX::Step::EnterRecheck;
use DX::Step::CompleteRecheck;
+use DX::Step::FailRecheck;
use DX::Class;
with 'DX::Role::Step';
-has proposition_list => (is => 'ro', required => 1);
+has proposition_list => (
+ is => 'ro', isa => PropositionList, required => 1
+);
+
+has on_completion_step => (is => 'ro', isa => Step, required => 1);
+
+has on_failure_step => (is => 'ro', isa => Maybe[Step], required => 1);
sub apply_to {
my ($self, $old_ss) = @_;
my ($prop, @rest) = @{$self->proposition_list};
- die "NOT YET DAMNIT" if @rest;
+ trace recheck => [ statement => [
+ [ symbol => 'recheck' ],
+ @{$prop->for_deparse->[1]},
+ ] ];
my $old_hyp = $old_ss->current_hypothesis;
internal_names => {},
);
- trace 'step.recheck.hyp' => $hyp;
+ my $next_step = (@rest
+ ? $self->but(proposition_list => \@rest)
+ : $self->on_completion_step);
my $ss = DX::SearchState->new(
current_hypothesis => $hyp,
- alternatives => [],
+ adjustments_made => [],
propositions => $pseq,
next_step => DX::Step::ConsiderProposition->new(
proposition => $prop,
),
is_solution_state => 0,
- on_exhaustion_step => undef,
on_solution_step => DX::Step::CompleteRecheck->new(
- resume_search_state => $old_ss,
+ resume_search_state => $old_ss->but(next_step => $next_step),
was_recheck_for => $prop,
),
+ on_exhaustion_step => DX::Step::FailRecheck->new(
+ resume_search_state => $old_ss->but(next_step => $self->on_failure_step),
+ ),
);
return $ss;