aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2021-11-11 15:18:59 +0000
committers-ol <s+removethis@s-ol.nu>2025-03-02 14:24:49 +0000
commit4de51d44dede14e0c22a526f8677909df6d2835f (patch)
tree083008c0738a833c2b28d89eeaaf903fc01ee4c8
parentauto-name Op and Builtin classes for better debugging (diff)
downloadalive-4de51d44dede14e0c22a526f8677909df6d2835f.tar.gz
alive-4de51d44dede14e0c22a526f8677909df6d2835f.zip
add merge! builtin op
-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