rename Step::Normal to Step::ResolveProposition
[scpubgit/DX.git] / lib / DX / Utils.pm
index 39b1794..243879f 100644 (file)
@@ -4,13 +4,14 @@ use strictures 2;
 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 = (
@@ -28,7 +29,7 @@ constant->import(+{
   map {; no strict 'refs'; $_ => \*$_ } @const
 });
 
-# $INDICES_OF = 1, ...
+# $EXISTENCE_OF = 1, ...
 
 do { no strict 'refs'; ${$dep_types[$_-1]} = $_ } for 1..@dep_types;
 
@@ -38,22 +39,28 @@ our $VALUE_EXISTS = 1;
 
 # 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 => { @_ },
   );
@@ -61,18 +68,24 @@ sub dict {
 
 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;