package DX::Predicate::Dict;
-use DX::Utils qw(step dict TYPE_OF);
+use DX::Utils qw(rspace res dict TYPE_OF);
use DX::Class;
with 'DX::Role::Predicate';
-sub _possible_resolution_list {
+sub _resolution_space_for {
my ($self, $arg, $proto) = @_;
- if ($arg->is_set) {
- die "dict called with non-dict"
- unless $arg->isa('DX::Value::Dict');
- return step(
- actions => [],
- depends_on => [ [ TYPE_OF ,=> $arg ] ]
- );
- }
- if ($proto and not $proto->isa('DX::Value::Dict')) {
- die "dict called with non-dict prototype";
- }
- my $set = $arg->action_for_set_value($proto||dict());
- return step(
- actions => [ $set ],
- depends_on => [ [ TYPE_OF ,=> $arg ] ]
+
+ die "dict called with non-dict"
+ if $arg->is_set and not $arg->isa('DX::Value::Dict');
+
+ die "dict called with non-dict prototype"
+ if $proto and not $proto->isa('DX::Value::Dict');
+
+ my $deps = [ [ TYPE_OF ,=> $arg ] ];
+
+ my $actions =
+ $arg->is_set ? [] : [ $arg->action_for_set_value($proto||dict()) ];
+
+ return rspace(
+ geometry_depends_on => $deps,
+ members => [ res(
+ actions => $actions,
+ veracity_depends_on => $deps
+ ) ],
);
}