aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2022-01-27 14:14:37 +0000
committers-ol <s+removethis@s-ol.nu>2025-03-02 14:24:49 +0000
commitec81cfeeb4797b30da03a631784e7adc86b86a95 (patch)
treef619e2d6444242121af48f044f004f6a09e1848d
parenttest logic module (diff)
downloadalive-ec81cfeeb4797b30da03a631784e7adc86b86a95.tar.gz
alive-ec81cfeeb4797b30da03a631784e7adc86b86a95.zip
use base.match.any consistently
-rw-r--r--alv-lib/array-.moon19
-rw-r--r--alv-lib/osc.moon6
-rw-r--r--alv-lib/rhythm.moon6
-rw-r--r--alv-lib/string.moon6
-rw-r--r--alv-lib/struct-.moon11
-rw-r--r--alv-lib/time.moon6
-rw-r--r--alv-lib/vis.moon6
-rw-r--r--alv/builtins.moon25
-rw-r--r--spec/match_spec.moon4
-rw-r--r--spec/pureop_spec.moon9
10 files changed, 44 insertions, 54 deletions
diff --git a/alv-lib/array-.moon b/alv-lib/array-.moon
index aeb6820..68557cd 100644
--- a/alv-lib/array-.moon
+++ b/alv-lib/array-.moon
@@ -1,10 +1,9 @@
-import Array, Op, PureOp, Builtin, Constant, Error, const, sig, evt, T from require 'alv.base'
+import Array, Op, PureOp, Builtin, Constant, Error, const, any, T from require 'alv.base'
import Cell from require 'alv.cell'
import Tag from require 'alv.tag'
builtins = require 'alv.builtins'
unpack or= table.unpack
-any = sig! / evt!
get = Constant.meta
meta:
@@ -16,7 +15,7 @@ get = Constant.meta
`i` has to be a constant expression."
value: class extends PureOp
- pattern: any + const.num
+ pattern: any! + const.num
type: (inputs) =>
{ array, i } = inputs
array\type!\get i.result!
@@ -36,7 +35,7 @@ set = Constant.meta
`array` and `val` may be a !-stream."
value: class extends PureOp
- pattern: any + const.num + any
+ pattern: any! + const.num + any!
type: (inputs) =>
{ array, i, val } = inputs
type = array\type!
@@ -64,7 +63,7 @@ head = Constant.meta
examples: { '(head array)' }
value: class extends PureOp
- pattern: any*1
+ pattern: any!*1
type: (inputs) =>
type = inputs[1]\type!
@@ -84,7 +83,7 @@ tail = Constant.meta
examples: { '(tail array)' }
value: class extends PureOp
- pattern: any*1
+ pattern: any!*1
type: (inputs) =>
type = inputs[1]\type!
@@ -107,7 +106,7 @@ prepend = Constant.meta
This is a pure op, so at most one of `array` and `val` may be a !-stream."
value: class extends PureOp
- pattern: any + any
+ pattern: any! + any!
type: (inputs) =>
{ array, val } = inputs
type = array\type!
@@ -139,7 +138,7 @@ necessary.
`array` and `val` may be a !-stream."
value: class extends PureOp
- pattern: any + const.num + any
+ pattern: any! + const.num + any!
type: (inputs) =>
{ array, i, val } = inputs
type = array\type!
@@ -172,7 +171,7 @@ remove = Constant.meta
`i` has to be a constant expression."
value: class extends PureOp
- pattern: any + const.num
+ pattern: any! + const.num
type: (inputs) =>
{ array, i } = inputs
type = array\type!
@@ -213,7 +212,7 @@ concat = Constant.meta
examples: { '(concat arr1 arr2 [arr3…])' }
value: class extends PureOp
- pattern: any\rep 2
+ pattern: any!\rep 2
type: (inputs) =>
size = 0
type = inputs[1]\type!.type
diff --git a/alv-lib/osc.moon b/alv-lib/osc.moon
index cf802b7..a75c22f 100644
--- a/alv-lib/osc.moon
+++ b/alv-lib/osc.moon
@@ -1,4 +1,4 @@
-import Op, PureOp, Constant, SigStream, Input, T, sig, evt from require 'alv.base'
+import Op, PureOp, Constant, SigStream, Input, T, sig, any from require 'alv.base'
import new_message, add_item from require 'alv-lib._osc'
import dns, udp from require 'socket'
@@ -47,9 +47,9 @@ send = Constant.meta
This is a pure op, so between the values at most one !-stream input is allowed."
value: class extends PureOp
- pattern: (evt! / sig!)^0
+ pattern: any!^0
- full_pattern = -sig['udp/socket'] + sig.str + (evt! / sig!)^0
+ full_pattern = -sig['udp/socket'] + sig.str + any!^0
setup: (inputs, scope) =>
{ socket, path, values } = full_pattern\match inputs
super values, scope, {
diff --git a/alv-lib/rhythm.moon b/alv-lib/rhythm.moon
index 582483f..2b92fdc 100644
--- a/alv-lib/rhythm.moon
+++ b/alv-lib/rhythm.moon
@@ -1,4 +1,4 @@
-import Constant, Op, Input, T, sig, evt from require 'alv.base'
+import Constant, Op, Input, T, sig, evt, any from require 'alv.base'
-- slower reference implementation
bjorklund = (n, k) ->
@@ -46,7 +46,7 @@ When fed a bang! trigger, steps forward to the next step on each trigger.
When fed a num~ or num! stream, outputs a bang if the corresponding step is on."
value: class extends Op
- pattern = (evt.bang / sig.num / evt.num) + sig.num + sig.num
+ pattern = (evt.bang / any.num) + sig.num + sig.num
setup: (inputs) =>
{ trig, n, k } = pattern\match inputs
@@ -91,7 +91,7 @@ When fed a bang! trigger, steps forward to the next step on each trigger.
When fed a num~ or num! stream, outputs a bang if the corresponding step is on."
value: class extends Op
- pattern = (evt.bang / sig.num / evt.num) + sig.bool*0
+ pattern = (evt.bang / any.num) + sig.bool*0
setup: (inputs) =>
{ trig, steps } = pattern\match inputs
diff --git a/alv-lib/string.moon b/alv-lib/string.moon
index c43dd6a..7508e8d 100644
--- a/alv-lib/string.moon
+++ b/alv-lib/string.moon
@@ -1,6 +1,4 @@
-import PureOp, Constant, Input, T, sig, evt from require 'alv.base'
-
-any = sig! / evt!
+import PureOp, Constant, Input, T, any from require 'alv.base'
str = Constant.meta
meta:
@@ -8,7 +6,7 @@ str = Constant.meta
summary: "Concatenate/stringify values."
examples: { '(.. v1 [v2…])', '(str v1 [v2…])' }
value: class extends PureOp
- pattern: any\rep 1, nil
+ pattern: any!\rep 1, nil
type: T.str
tick: => @out\set table.concat [tostring i! for i in *@inputs]
diff --git a/alv-lib/struct-.moon b/alv-lib/struct-.moon
index 94bd82f..b064e81 100644
--- a/alv-lib/struct-.moon
+++ b/alv-lib/struct-.moon
@@ -1,6 +1,5 @@
-import Struct, Op, PureOp, Constant, Error, const, sig, evt from require 'alv.base'
+import Struct, Op, PureOp, Constant, Error, const, any from require 'alv.base'
-any = sig! / evt!
key_type = const.str / const.sym
get = Constant.meta
@@ -13,7 +12,7 @@ get = Constant.meta
`key` has to be a constant expression."
value: class extends PureOp
- pattern: any + key_type
+ pattern: any! + key_type
type: (inputs) =>
{ struct, key } = inputs
struct\type!\get key.result!
@@ -33,7 +32,7 @@ set = Constant.meta
`struct` and `val` may be a !-stream."
value: class extends PureOp
- pattern: any + key_type + any
+ pattern: any! + key_type + any!
type: (inputs) =>
{ struct, key, val } = inputs
type = struct\type!
@@ -65,7 +64,7 @@ insert = Constant.meta
`struct` and `val` may be a !-stream."
value: class extends PureOp
- pattern: any + key_type + any
+ pattern: any! + key_type + any!
type: (inputs) =>
{ struct, key, val } = inputs
type = struct\type!
@@ -98,7 +97,7 @@ remove = Constant.meta
`key` has to be a constant expression."
value: class extends PureOp
- pattern: any + key_type
+ pattern: any! + key_type
type: (inputs) =>
{ struct, key } = inputs
type = struct\type!
diff --git a/alv-lib/time.moon b/alv-lib/time.moon
index a39849a..6852f9e 100644
--- a/alv-lib/time.moon
+++ b/alv-lib/time.moon
@@ -1,4 +1,4 @@
-import Constant, Error, Op, Input, T, sig, evt from require 'alv.base'
+import Constant, Error, Op, Input, T, sig, evt, any from require 'alv.base'
import RTNode from require 'alv'
import monotime from require 'system'
@@ -348,7 +348,7 @@ Creates smooth transitions when `value` changes.
super ...
@out = T.num\mk_sig!
- pattern = -evt.clock + sig.num + (sig.num / evt.num)
+ pattern = -evt.clock + sig.num + any.num
setup: (inputs, scope) =>
{ clock, rate, value } = pattern\match inputs
@@ -384,7 +384,7 @@ Delays incoming `evt`s by `delay`.
super ...
@state = {}
- pattern = -evt.clock + (sig.num / evt.num) + (sig! / evt!)
+ pattern = -evt.clock + any.num + any!
setup: (inputs, scope) =>
{ clock, delay, evt } = pattern\match inputs
diff --git a/alv-lib/vis.moon b/alv-lib/vis.moon
index 9429ef2..941f9e4 100644
--- a/alv-lib/vis.moon
+++ b/alv-lib/vis.moon
@@ -1,4 +1,4 @@
-import Constant, Op, T, Array, Input, sig, evt from require 'alv.base'
+import Constant, Op, T, Array, Input, sig, any from require 'alv.base'
bar = Constant.meta
meta:
@@ -11,7 +11,7 @@ Visualizes `val` as a bar with range `min, max`.
`min` defaults to `0` and `max` defaults to `1`."
value: class extends Op
- pattern = (sig.num / evt.num) + -sig.num + -sig.num
+ pattern = any.num + -sig.num + -sig.num
setup: (inputs, scope) =>
{ val, min, max } = pattern\match inputs
if not max
@@ -52,7 +52,7 @@ Visualizes `val` as an RGB(A) color with each component in range `0 - range`.
value: class extends Op
a3 = (Array 3, T.num)
a4 = (Array 4, T.num)
- color = (sig a3) / (sig a4) / (evt a3) / (evt a4)
+ color = (any a3) / (any a4)
pattern = color + -sig.num
setup: (inputs, scope) =>
{ val, max } = pattern\match inputs
diff --git a/alv/builtins.moon b/alv/builtins.moon
index acb396e..c5f68a2 100644
--- a/alv/builtins.moon
+++ b/alv/builtins.moon
@@ -5,7 +5,7 @@
-- documentation.
--
-- @module builtins
-import Builtin, Op, PureOp, T, FnDef, Input, const, sig, evt, Struct, Array
+import Builtin, Op, PureOp, T, FnDef, Input, const, sig, evt, any, Struct, Array
from require 'alv.base'
import Constant from require 'alv.result'
import Error from require 'alv.error'
@@ -334,8 +334,7 @@ switch_ = Constant.meta
`true` and `false` respectively. This version takes at most two argumetns."
value: class extends Op
- val_or_evt = (sig! / evt!)!
- pattern = (sig.num / sig.bool / evt.num / evt.bool / evt.bang) + val_or_evt*0
+ pattern = (sig.num / sig.bool / evt.num / evt.bool / evt.bang) + any!!*0
setup: (inputs) =>
{ i, values } = pattern\match inputs
@@ -459,7 +458,7 @@ Since ~-streams cannot be emtpy, specifying an `initial` value is necessary."
value: class extends Op
setup: (inputs) =>
- { event, initial } = (evt! + sig!)\match inputs
+ { event, initial } = any!\match inputs
assert event\type! == initial\type!,
Error 'argument', "~ arguments have to be of the same type"
@@ -482,7 +481,7 @@ to_evt = Constant.meta
- if `trig` is given, samples `sig` as a new event when `trig` arrives."
value: class extends Op
- pattern = (sig! + evt.bang) / (sig! / evt!)\rep(1,1)
+ pattern = (sig! + evt.bang) / any!\rep(1,1)
setup: (inputs) =>
{ sig_, trig } = pattern\match inputs
if trig
@@ -507,14 +506,13 @@ merge = Constant.meta
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`…
+Merges two or more !-streams of the same type.
+Whenever any of the input events fires, the output fires the same value.
-`(recur nv1 [nv2…])` is equivalent to `(*recur* nv1 [nv2…])`."
+In case of collisions, the event that comes first in the argument list wins."
value: class extends Op
- val_or_evt = (sig! / evt!)!
- pattern = val_or_evt\rep 2
+ pattern = any!!\rep 2
setup: (inputs) =>
values = pattern\match inputs
super [Input.hot v for v in *values]
@@ -537,10 +535,8 @@ array = Constant.meta
This is a pure op, so at most one !-stream input is allowed."
value: do
- any = sig! / evt!
-
class extends PureOp
- pattern: any!*0
+ pattern: any!!*0
type: (args) =>
Array #args, args[1]\type!
@@ -560,8 +556,7 @@ This is a pure op, so at most one !-stream input is allowed."
value: do
key = const.str / const.sym
- val = sig! / evt!
- pair = (key + val)\named 'key', 'val'
+ pair = (key + any!)\named 'key', 'val'
class extends PureOp
pattern: pair*0
diff --git a/spec/match_spec.moon b/spec/match_spec.moon
index 0f06c64..b9d5ef6 100644
--- a/spec/match_spec.moon
+++ b/spec/match_spec.moon
@@ -1,4 +1,4 @@
-import const, sig, evt from require 'alv.base.match'
+import const, sig, evt, any from require 'alv.base.match'
import Op, Input from require 'alv.base'
import RTNode, T, Error from require 'alv'
@@ -167,7 +167,7 @@ describe 'choice', ->
assert.has.error -> same\match { bool, bool }
it 'makes inner types recall', ->
- same = (sig! / evt!)!
+ same = any!!
same = same + same
assert.is.same { str, str }, same\match { str, str }
assert.is.same { num, num }, same\match { num, num }
diff --git a/spec/pureop_spec.moon b/spec/pureop_spec.moon
index d2a4a89..a8fa823 100644
--- a/spec/pureop_spec.moon
+++ b/spec/pureop_spec.moon
@@ -1,12 +1,12 @@
import do_setup, do_teardown, invoke_op from require 'spec.test_setup'
-import PureOp, Input, T, sig, evt from require 'alv.base'
+import PureOp, Input, T, sig, any from require 'alv.base'
import RTNode from require 'alv'
setup do_setup
teardown do_teardown
class TestPureOp extends PureOp
- pattern: (sig.num / sig.str / evt.num)*3
+ pattern: (any.num / sig.str)*3
type: T.num
tick: => @out\set 1
@@ -81,9 +81,8 @@ describe 'PureOp', ->
assert.has.error -> invoke_op TestPureOp, { (literal a), (literal b) }
it 'supports nested input patterns', ->
- num = sig.num / evt.num
class NestedInputOp extends PureOp
- pattern: (num + sig.str)\named('a', 'b')\rep 2, 2
+ pattern: (any.num + sig.str)\named('a', 'b')\rep 2, 2
type: T.num
tick: => @out\set 1
@@ -106,7 +105,7 @@ describe 'PureOp', ->
it 'supports dynamically generating the output type', ->
class DynamicOp extends PureOp
- pattern: sig.num + (sig! / evt!)
+ pattern: sig.num + any!
type: (inputs) => inputs[2]\type!
tick: => @out\set @inputs[2]!
typ = spy.on DynamicOp, 'type'