diff options
| author | s-ol <s+removethis@s-ol.nu> | 2021-11-11 15:18:59 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2025-03-02 14:24:49 +0000 |
| commit | 4de51d44dede14e0c22a526f8677909df6d2835f (patch) | |
| tree | 083008c0738a833c2b28d89eeaaf903fc01ee4c8 | |
| parent | auto-name Op and Builtin classes for better debugging (diff) | |
| download | alive-4de51d44dede14e0c22a526f8677909df6d2835f.tar.gz alive-4de51d44dede14e0c22a526f8677909df6d2835f.zip | |
add merge! builtin op
| -rw-r--r-- | alv/builtins.moon | 26 |
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 |
