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