aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--alv/builtins.moon26
1 files changed, 26 insertions, 0 deletions
diff --git a/alv/builtins.moon b/alv/builtins.moon
index 7caa53c..78cbbbf 100644
--- a/alv/builtins.moon
+++ b/alv/builtins.moon
@@ -499,6 +499,31 @@ to_evt = Constant.meta
return if setup
@out\set @inputs.sig!
+merge = Constant.meta
+ meta:
+ name: 'merge!'
+ summary: "Merge !-streams."
+ examples: { '(merge! evt1 evt2 [evt3…])' }
+ description: "
+Reenters the innermost `(loop)` from the top, with `k1` bound to `nv1`, `k2`
+bound to `nv2`…
+
+`(recur nv1 [nv2…])` is equivalent to `(*recur* nv1 [nv2…])`."
+
+ value: class extends Op
+ val_or_evt = (sig! / evt!)!
+ pattern = val_or_evt\rep 2
+ setup: (inputs) =>
+ values = pattern\match inputs
+ super [Input.hot v for v in *values]
+ @out = @inputs[1]\type!\mk_evt!
+
+ tick: =>
+ for input in *@inputs
+ if input\dirty!
+ @out\set input!
+ return
+
array = Constant.meta
meta:
name: 'array'
@@ -690,6 +715,7 @@ Constant.meta
'=': to_const
'~': to_sig
'!': to_evt
+ 'merge!': merge
'->': thread_first
'->>': thread_last