rewrite deparse system
[scpubgit/DX.git] / lib / DX / Proposition.pm
CommitLineData
9d759b64 1package DX::Proposition;
2
384a5e93 3use Types::Standard qw(HashRef ArrayRef Str);
9d759b64 4use DX::Class;
5
384a5e93 6has predicate => (is => 'ro', isa => Str, required => 1);
9d759b64 7
a97779a1 8has args => (is => 'ro', isa => ArrayRef[Str|Value], required => 1);
9d759b64 9
a97779a1 10has introduced_names => (is => 'ro', isa => HashRef[One], required => 1);
d1b6cb33 11
a97779a1 12has required_names => (is => 'ro', isa => HashRef[One], required => 1);
d1b6cb33 13
c25fbf05 14sub for_deparse {
15 my ($self) = @_;
16 [ statement => [
17 [ symbol => $self->predicate ],
18 map {
19 ref($_)
20 ? $_
21 : [ symbol => $self->introduced_names->{$_} ? "?$_" : $_ ]
22 } @{$self->args}
23 ] ];
24}
25
9d759b64 26sub resolve_for {
27 my ($self, $scope) = @_;
28 my $predicate = $scope->lookup_predicate($self->predicate);
29 my @args = map { ref($_) ? $_ : $scope->lookup($_) } @{$self->args};
efad53c4 30 #if (my $step = $scope->known_facts->resolution_step_for($predicate, @args)) {
31 # return $step;
32 #}
ccf0d4fe 33 return $predicate->resolution_step_for($self, @args);
9d759b64 34}
35
361;