use Exporter 'import';
my @const = (
- my @dep_types = qw(EXISTENCE_OF INDICES_OF TYPE_OF CONTENTS_OF),
+ my @dep_types = qw(EXISTENCE_OF TYPE_OF INDICES_OF CONTENTS_OF),
my @ev_types = qw(VALUE_SET VALUE_EXISTS),
);
our @EXPORT_OK = (
@const,
- my @builders = qw(step string number dict proposition)
+ (my @builders = qw(step string number dict proposition)),
+ 'deparse', '*trace',
);
our %EXPORT_TAGS = (
map {; no strict 'refs'; $_ => \*$_ } @const
});
-# $INDICES_OF = 1, ...
+# $EXISTENCE_OF = 1, ...
do { no strict 'refs'; ${$dep_types[$_-1]} = $_ } for 1..@dep_types;
# VALUE_EXISTS triggers all types, VALUE_SET all but EXISTENCE_OF
-our @VALUE_EXISTS = (EXISTENCE_OF(), INDICES_OF(), TYPE_OF(), CONTENTS_OF());
-our @VALUE_SET = (INDICES_OF(), TYPE_OF(), CONTENTS_OF());
+our @VALUE_EXISTS = (EXISTENCE_OF(), TYPE_OF(), INDICES_OF(), CONTENTS_OF());
+our @VALUE_SET = (TYPE_OF(), INDICES_OF(), CONTENTS_OF());
+
+sub trace { }
sub step {
- DX::Step::Normal->new(@_);
+ require DX::Step::ResolveProposition;
+ DX::Step::ResolveProposition->new(@_);
}
sub string {
+ require DX::Value::String;
DX::Value::String->new(string_value => $_[0])
}
sub number {
+ require DX::Value::Number;
DX::Value::Number->new(number_value => $_[0]);
}
sub dict {
+ require DX::Value::Dict;
DX::Value::Dict->new(
members => { @_ },
);
sub proposition {
my ($pred, @args) = @_;
+ require DX::Proposition;
DX::Proposition->new(
predicate => $pred,
args => \@args,
);
}
-# Here so that circular require doesn't stab us in the face
-
-require DX::Step::Normal;
-require DX::Value::String;
-require DX::Value::Number;
-require DX::Value::Dict;
-require DX::Proposition;
+{
+ my $dp;
+
+ sub deparse {
+ $dp ||= do {
+ require DX::Deparse;
+ DX::Deparse->new;
+ };
+ my ($thing) = @_;
+ $dp->fmt($thing);
+ }
+}
1;