member_at starting to work
[scpubgit/DX.git] / lib / DX / Utils.pm
CommitLineData
9d759b64 1package DX::Utils;
2
3use strictures 2;
4use Exporter 'import';
5
efad53c4 6my @const = (
7 my @dep_types = qw(EXISTENCE_OF INDICES_OF TYPE_OF CONTENTS_OF),
8 my @ev_types = qw(VALUE_SET VALUE_EXISTS),
9);
9d759b64 10
efad53c4 11our @EXPORT_OK = (
12 @const,
13 my @builders = qw(step string number dict proposition)
14);
15
16our %EXPORT_TAGS = (
17 all => \@EXPORT_OK,
18 dep_types => \@dep_types,
19 event_types => \@ev_types,
20 builders => \@builders,
21);
22
23require constant;
24
25# use constant INDICES_OF => \*INDICES_OF;
26
27constant->import(+{
28 map {; no strict 'refs'; $_ => \*$_ } @const
29});
30
31# $INDICES_OF = 1, ...
32
33do { no strict 'refs'; ${$dep_types[$_-1]} = $_ } for 1..@dep_types;
34
35# VALUE_EXISTS needs to trigger indices checks on its parent
36
37our $VALUE_EXISTS = 1;
38
39# VALUE_EXISTS triggers all types, VALUE_SET all but EXISTENCE_OF
40
41our @VALUE_EXISTS = (EXISTENCE_OF(), INDICES_OF(), TYPE_OF(), CONTENTS_OF());
42our @VALUE_SET = (INDICES_OF(), TYPE_OF(), CONTENTS_OF());
9d759b64 43
44sub step {
45 DX::Step::Normal->new(@_);
46}
47
48sub string {
49 DX::Value::String->new(string_value => $_[0])
50}
51
52sub number {
53 DX::Value::Number->new(number_value => $_[0]);
54}
55
efad53c4 56sub dict {
57 DX::Value::Dict->new(
58 members => { @_ },
59 );
60}
61
62sub proposition {
63 my ($pred, @args) = @_;
64 DX::Proposition->new(
65 predicate => $pred,
66 args => \@args,
67 );
68}
69
9d759b64 70# Here so that circular require doesn't stab us in the face
71
72require DX::Step::Normal;
73require DX::Value::String;
74require DX::Value::Number;
efad53c4 75require DX::Value::Dict;
76require DX::Proposition;
9d759b64 77
781;