diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2020-05-14 15:19:02 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2020-05-14 15:19:02 +0000 |
| commit | fcdbca5c4ebf7cc8d57968f4267e86fc6b31233b (patch) | |
| tree | 82f3938b4af37d32f12fa5516a22ce010e317dd3 | |
| parent | pureops with arbitrary pattern (diff) | |
| download | alive-fcdbca5c4ebf7cc8d57968f4267e86fc6b31233b.tar.gz alive-fcdbca5c4ebf7cc8d57968f4267e86fc6b31233b.zip | |
add array and struct constructors
| -rw-r--r-- | alv-lib/array.moon | 22 | ||||
| -rw-r--r-- | alv-lib/struct.moon | 25 |
2 files changed, 47 insertions, 0 deletions
diff --git a/alv-lib/array.moon b/alv-lib/array.moon new file mode 100644 index 0000000..752b1ff --- /dev/null +++ b/alv-lib/array.moon @@ -0,0 +1,22 @@ +import PureOp, Constant, T, Array, val, evt from require 'alv.base' + +any = val! / evt! + +array = Constant.meta + meta: + name: 'array' + summary: "Construct an array." + examples: { '(array a b c…)' } + description: "Produces an array of values." + + value: class extends PureOp + pattern: any!*0 + type: (args) => Array #args, args[1]\type! + + tick: => + args = @unwrap_all! + @out\set args + +{ + :array +} diff --git a/alv-lib/struct.moon b/alv-lib/struct.moon new file mode 100644 index 0000000..e30c38d --- /dev/null +++ b/alv-lib/struct.moon @@ -0,0 +1,25 @@ +import PureOp, Constant, T, Struct, val, evt from require 'alv.base' + +key = val.str / val.sym +val = val! / evt! +pair = (key + val)\named 'key', 'val' + +struct = Constant.meta + meta: + name: 'struct' + summary: "Construct an struct." + examples: { '(struct key1 val1 [key2 val2…])' } + description: "Produces an struct of values." + + value: class extends PureOp + pattern: pair*0 + type: (pairs) => + Struct {key.result!, val\type! for {:key, :val} in *pairs} + + tick: => + pairs = @unwrap_all! + @out\set {key, val for {:key, :val} in *pairs} + +{ + :struct +} |
