package DX::Proposition;
-use Types::Standard qw(HashRef ArrayRef Str);
use DX::Class;
has predicate => (is => 'ro', isa => Str, required => 1);
-has args => (is => 'ro', isa => ArrayRef, required => 1);
+has args => (is => 'ro', isa => ArrayRef[Str|Value], required => 1);
-has introduced_names => (is => 'ro', isa => HashRef, required => 1);
+has introduced_names => (is => 'ro', isa => HashRef[One], required => 1);
-has required_names => (is => 'ro', isa => HashRef, required => 1);
+has required_names => (is => 'ro', isa => HashRef[One], required => 1);
+
+sub for_deparse {
+ my ($self) = @_;
+ [ statement => [
+ [ symbol => $self->predicate ],
+ map {
+ ref($_)
+ ? $_
+ : [ symbol => $self->introduced_names->{$_} ? "?$_" : $_ ]
+ } @{$self->args}
+ ] ];
+}
sub resolve_for {
my ($self, $scope) = @_;
#if (my $step = $scope->known_facts->resolution_step_for($predicate, @args)) {
# return $step;
#}
- return $predicate->resolution_step_for(@args);
+ return $predicate->resolution_step_for($self, @args);
}
1;