From fcdbca5c4ebf7cc8d57968f4267e86fc6b31233b Mon Sep 17 00:00:00 2001 From: s-ol Date: Thu, 14 May 2020 17:19:02 +0200 Subject: add array and struct constructors --- alv-lib/array.moon | 22 ++++++++++++++++++++++ alv-lib/struct.moon | 25 +++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 alv-lib/array.moon create mode 100644 alv-lib/struct.moon 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 +} -- cgit v1.2.3