aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2020-05-27 11:09:15 +0000
committers-ol <s+removethis@s-ol.nu>2025-03-02 14:24:49 +0000
commit7c060bf6524ce63e34fe27a594851c295bed1231 (patch)
tree59b98be32a06dd2371af876504f0a46f106b434b
parentallow > and < in symbol names (diff)
downloadalive-7c060bf6524ce63e34fe27a594851c295bed1231.tar.gz
alive-7c060bf6524ce63e34fe27a594851c295bed1231.zip
rename base.match.val → base.match.sig
-rw-r--r--alv-lib/logic.moon4
-rw-r--r--alv-lib/math.moon4
-rw-r--r--alv-lib/midi.moon8
-rw-r--r--alv-lib/midi/core.moon8
-rw-r--r--alv-lib/midi/launchctl.moon10
-rw-r--r--alv-lib/osc.moon8
-rw-r--r--alv-lib/pilot.moon6
-rw-r--r--alv-lib/random.moon4
-rw-r--r--alv-lib/rhythm.moon6
-rw-r--r--alv-lib/sc.moon6
-rw-r--r--alv-lib/string.moon4
-rw-r--r--alv-lib/time.moon18
-rw-r--r--alv-lib/util.moon8
-rw-r--r--alv/base/init.moon6
-rw-r--r--alv/base/match.moon20
-rw-r--r--alv/builtins.moon14
-rw-r--r--docs/internals/extensions.md6
-rw-r--r--spec/match_spec.moon86
-rw-r--r--spec/pureop_spec.moon10
19 files changed, 118 insertions, 118 deletions
diff --git a/alv-lib/logic.moon b/alv-lib/logic.moon
index 5ca4e68..1d853dc 100644
--- a/alv-lib/logic.moon
+++ b/alv-lib/logic.moon
@@ -1,4 +1,4 @@
-import PureOp, Constant, T, val, evt from require 'alv.base'
+import PureOp, Constant, T, sig, evt from require 'alv.base'
all_same = (first, list) ->
for v in *list
@@ -14,7 +14,7 @@ tobool = (val) ->
else
true
-any = val! / evt!
+any = sig! / evt!
class ReduceOp extends PureOp
pattern: any\rep 2, nil
diff --git a/alv-lib/math.moon b/alv-lib/math.moon
index b51718a..8475742 100644
--- a/alv-lib/math.moon
+++ b/alv-lib/math.moon
@@ -1,7 +1,7 @@
-import PureOp, Constant, T, val, evt from require 'alv.base'
+import PureOp, Constant, T, sig, evt from require 'alv.base'
unpack or= table.unpack
-num = val.num / evt.num
+num = sig.num / evt.num
class ReduceOp extends PureOp
pattern: num\rep 2, nil
diff --git a/alv-lib/midi.moon b/alv-lib/midi.moon
index 503b91c..fc28f2e 100644
--- a/alv-lib/midi.moon
+++ b/alv-lib/midi.moon
@@ -1,4 +1,4 @@
-import Constant, Op, Input, T, val, evt from require 'alv.base'
+import Constant, Op, Input, T, sig, evt from require 'alv.base'
import input, output, inout, apply_range from require 'alv-lib.midi.core'
gate = Constant.meta
@@ -8,7 +8,7 @@ gate = Constant.meta
examples: { '(midi/gate [port] note [chan])' }
value: class extends Op
- pattern = -evt['midi/port'] + val.num -val.num
+ pattern = -evt['midi/port'] + sig.num -sig.num
setup: (inputs, scope) =>
@out or= T.bool\mk_sig!
{ port, note, chan } = pattern\match inputs
@@ -37,7 +37,7 @@ trig = Constant.meta
examples: { '(midi/trig [port] note [chan])' }
value: class extends Op
- pattern = -evt['midi/port'] + val.num -val.num
+ pattern = -evt['midi/port'] + sig.num -sig.num
setup: (inputs, scope) =>
@out or= T.bang\mk_evt!
{ port, note, chan } = pattern\match inputs
@@ -69,7 +69,7 @@ cc = Constant.meta
- (num) [ 0 - num["
value: class extends Op
- pattern = -evt['midi/port'] + val.num + -val.num + -val.num
+ pattern = -evt['midi/port'] + sig.num + -sig.num + -sig.num
setup: (inputs, scope) =>
{ port, cc, chan, range } = pattern\match inputs
super
diff --git a/alv-lib/midi/core.moon b/alv-lib/midi/core.moon
index 71d1e9f..15ae3d6 100644
--- a/alv-lib/midi/core.moon
+++ b/alv-lib/midi/core.moon
@@ -1,4 +1,4 @@
-import Constant, IOStream, Op, Input, T, Error, val from require 'alv.base'
+import Constant, IOStream, Op, Input, T, Error, sig from require 'alv.base'
import RtMidiIn, RtMidiOut, RtMidi from require 'luartmidi'
bit = do
@@ -71,7 +71,7 @@ input = Constant.meta
value: class extends PortOp
setup: (inputs) =>
- name = val.str\match inputs
+ name = sig.str\match inputs
super inp: Input.hot name
output = Constant.meta
@@ -82,7 +82,7 @@ output = Constant.meta
value: class extends PortOp
setup: (inputs) =>
- name = val.str\match inputs
+ name = sig.str\match inputs
super out: Input.hot name
inout = Constant.meta
@@ -93,7 +93,7 @@ inout = Constant.meta
value: class extends PortOp
setup: (inputs) =>
- { inp, out } = (val.str + val.str)\match inputs
+ { inp, out } = (sig.str + sig.str)\match inputs
super
inp: Input.hot inp
out: Input.hot out
diff --git a/alv-lib/midi/launchctl.moon b/alv-lib/midi/launchctl.moon
index f3c0295..69d96ff 100644
--- a/alv-lib/midi/launchctl.moon
+++ b/alv-lib/midi/launchctl.moon
@@ -1,4 +1,4 @@
-import Constant, Op, Input, T, val, evt from require 'alv.base'
+import Constant, Op, Input, T, sig, evt from require 'alv.base'
import apply_range, bit from require 'alv-lib.midi.core'
import bor, lshift from bit
@@ -22,8 +22,8 @@ range can be one of:
- (num) [ 0 - num["
value: class extends Op
- num = val.num
- pattern = -evt['midi/port'] + num + num + num + -num + -(val.str + num)
+ num = sig.num
+ pattern = -evt['midi/port'] + num + num + num + -num + -(sig.str + num)
setup: (inputs, scope) =>
{ port, i, start, chan, steps, range } = pattern\match inputs
@@ -68,7 +68,7 @@ Send `true` or `false` for the `i`-th note-button (MIDI-notes starting from
`start`). `steps` defaults to 8."
value: class extends Op
- pattern = -evt['midi/port'] + val.num + val.num + val.num + -val.num
+ pattern = -evt['midi/port'] + sig.num + sig.num + sig.num + -sig.num
setup: (inputs, scope) =>
@out or= T.bool\mk_sig!
@state or= {}
@@ -130,7 +130,7 @@ Send bangs for the `i`-th note-button (MIDI-notes starting from `start`).
`steps` defaults to 8."
value: class extends Op
- pattern = -evt['midi/port'] + val.num + val.num + val.num + -val.num
+ pattern = -evt['midi/port'] + sig.num + sig.num + sig.num + -sig.num
setup: (inputs, scope) =>
@out or= T.bang\mk_evt!
@state or= {}
diff --git a/alv-lib/osc.moon b/alv-lib/osc.moon
index 05ac357..ff58c94 100644
--- a/alv-lib/osc.moon
+++ b/alv-lib/osc.moon
@@ -1,4 +1,4 @@
-import Op, Constant, SigStream, Input, T, val, evt from require 'alv.base'
+import Op, Constant, SigStream, Input, T, sig, evt from require 'alv.base'
import pack from require 'osc'
import dns, udp from require 'socket'
@@ -11,7 +11,7 @@ connect = Constant.meta
examples: { '(osc/connect host port)' }
value: class extends Op
- pattern = val.str + val.num
+ pattern = sig.str + sig.num
setup: (inputs) =>
@out or= SigStream T['udp/socket']
{ host, port } = pattern\match inputs
@@ -38,7 +38,7 @@ send = Constant.meta
- `path` is the OSC path to send the message to. It should be a string-value.
- `evt` is the argument to send. It should be an event stream."
value: class extends Op
- pattern = -val['udp/socket'] + val.str + evt!
+ pattern = -sig['udp/socket'] + sig.str + evt!
setup: (inputs, scope) =>
{ socket, path, value } = pattern\match inputs
super
@@ -67,7 +67,7 @@ of the arguments change.
- `val` is the value to Synchronize. It should be a value stream."
value: class extends Op
- pattern = -val['udp/socket'] + val.str + val!
+ pattern = -sig['udp/socket'] + sig.str + sig!
setup: (inputs, scope) =>
{ socket, path, value } = pattern\match inputs
super
diff --git a/alv-lib/pilot.moon b/alv-lib/pilot.moon
index fb68121..1f14c73 100644
--- a/alv-lib/pilot.moon
+++ b/alv-lib/pilot.moon
@@ -1,4 +1,4 @@
-import Op, Constant, Input, val, evt from require 'alv.base'
+import Op, Constant, Input, sig, evt from require 'alv.base'
import udp from require 'socket'
local conn
@@ -20,7 +20,7 @@ send = (...) ->
conn or= udp!
conn\sendto str, '127.0.0.1', 49161
-arg = val.num / val.str
+arg = sig.num / sig.str
play = Constant.meta
meta:
@@ -69,7 +69,7 @@ effect = Constant.meta
description: "`effect` should be one of 'DIS', 'CHO', 'REV' or 'FEE'"
value: class extends Op
- pattern = val.str + arg + arg
+ pattern = sig.str + arg + arg
setup: (inputs) =>
{ which, a, b } = pattern\match inputs
super {
diff --git a/alv-lib/random.moon b/alv-lib/random.moon
index a2e4c60..8092f4f 100644
--- a/alv-lib/random.moon
+++ b/alv-lib/random.moon
@@ -1,4 +1,4 @@
-import Constant, Error, Op, Input, T, Array, val, evt from require 'alv.base'
+import Constant, Error, Op, Input, T, Array, sig, evt from require 'alv.base'
apply_range = (range, val) ->
if range\type! == T.str
@@ -22,7 +22,7 @@ range can be one of:
- 'deg' [ 0 - 360[
- (num) [ 0 - num["
-pattern = -evt.bang + -(val.num / val.str)
+pattern = -evt.bang + -(sig.num / sig.str)
num = Constant.meta
meta:
diff --git a/alv-lib/rhythm.moon b/alv-lib/rhythm.moon
index d4d4e6c..19dbdeb 100644
--- a/alv-lib/rhythm.moon
+++ b/alv-lib/rhythm.moon
@@ -1,4 +1,4 @@
-import Constant, Op, Input, T, val, evt from require 'alv.base'
+import Constant, Op, Input, T, sig, evt 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 / val.num / evt.num) + val.num + val.num
+ pattern = (evt.bang / sig.num / evt.num) + sig.num + sig.num
setup: (inputs) =>
{ trig, n, k } = pattern\match inputs
@@ -89,7 +89,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 / val.num / evt.num) + val.bool*0
+ pattern = (evt.bang / sig.num / evt.num) + sig.bool*0
setup: (inputs) =>
{ trig, steps } = pattern\match inputs
diff --git a/alv-lib/sc.moon b/alv-lib/sc.moon
index 7e4c711..f4aac65 100644
--- a/alv-lib/sc.moon
+++ b/alv-lib/sc.moon
@@ -1,4 +1,4 @@
-import Op, Constant, Input, val, evt from require 'alv.base'
+import Op, Constant, Input, sig, evt from require 'alv.base'
import pack from require 'osc'
import dns, udp from require 'socket'
@@ -18,7 +18,7 @@ Plays the synth `synth` on the `udp/socket` `socket` whenever `trig` is live.
- `trig` is the trigger signal. It should be a stream of bang-events.
- `param` is the name of a synthdef parameter. It should be a string-value."
value: class extends Op
- pattern = -val['udp/socket'] + val.str + evt.bang + (val.str + val.num)\rep 0
+ pattern = -sig['udp/socket'] + sig.str + evt.bang + (sig.str + sig.num)\rep 0
setup: (inputs, scope) =>
{ socket, synth, trig, ctrls } = pattern\match inputs
@@ -55,7 +55,7 @@ Plays the synth `synth` on the `udp/socket` `socket` whenever any `evt` is live.
streams. Incoming events will cause a note to be played, while value changes
will not."
value: class extends Op
- pattern = -val['udp/socket'] + val.str + (val.str + (val.num / evt.num))\rep 0
+ pattern = -sig['udp/socket'] + sig.str + (sig.str + (sig.num / evt.num))\rep 0
setup: (inputs, scope) =>
{ socket, synth, trig, ctrls } = pattern\match inputs
diff --git a/alv-lib/string.moon b/alv-lib/string.moon
index 24a2a1b..37810a4 100644
--- a/alv-lib/string.moon
+++ b/alv-lib/string.moon
@@ -1,6 +1,6 @@
-import PureOp, Constant, Input, T, val, evt from require 'alv.base'
+import PureOp, Constant, Input, T, sig, evt from require 'alv.base'
-any = val! / evt!
+any = sig! / evt!
str = Constant.meta
meta:
diff --git a/alv-lib/time.moon b/alv-lib/time.moon
index c79c430..09cc068 100644
--- a/alv-lib/time.moon
+++ b/alv-lib/time.moon
@@ -1,4 +1,4 @@
-import Constant, EvtStream, IOStream, Error, Op, Input, T, val, evt
+import Constant, EvtStream, IOStream, Error, Op, Input, T, sig, evt
from require 'alv.base'
import monotime from require 'system'
@@ -38,7 +38,7 @@ frame rate.
@out or= Clock!
setup: (inputs) =>
- fps = (-val.num)\match inputs
+ fps = (-sig.num)\match inputs
super fps: Input.hot fps or Constant.num 60
@out.frametime = 1 / @inputs.fps!
@@ -60,7 +60,7 @@ scale_time = Constant.meta
super ...
@out or= T.clock\mk_evt!
- pattern = -evt.clock + val.num + -val.str
+ pattern = -evt.clock + sig.num + -sig.str
setup: (inputs, scope) =>
{ clock, scale } = pattern\match inputs
super
@@ -92,7 +92,7 @@ lfo = Constant.meta
@out or= T.num\mk_sig!
default_wave = Constant.str 'sin'
- pattern = -evt.clock + val.num + -val.str
+ pattern = -evt.clock + sig.num + -sig.str
setup: (inputs, scope) =>
{ clock, freq, wave } = pattern\match inputs
super
@@ -128,7 +128,7 @@ ramp = Constant.meta
@state or= 0
@out or= T.num\mk_sig!
- pattern = -evt.clock + val.num + -val.num
+ pattern = -evt.clock + sig.num + -sig.num
setup: (inputs, scope) =>
{ clock, period, max } = pattern\match inputs
super
@@ -163,7 +163,7 @@ tick = Constant.meta
@state or= { phase: 0, count: 0 }
@out or= T.num\mk_sig @state.count
- pattern = -evt.clock + val.num
+ pattern = -evt.clock + sig.num
setup: (inputs, scope) =>
{ clock, period } = pattern\match inputs
super
@@ -195,7 +195,7 @@ every = Constant.meta
super ...
@state or= 0
- pattern = -evt.clock + val.num + -val!
+ pattern = -evt.clock + sig.num + -sig!
setup: (inputs, scope) =>
{ clock, period, evt } = pattern\match inputs
super
@@ -229,8 +229,8 @@ Emits `evt1`, `evt2`, … as events with delays `delay0`, `delay1`, … in betwe
super ...
@state or= { i: 1, t: 0 }
- pair = (val! + val.num)\named('value', 'delay')
- pattern = -evt.clock + val.num + pair*0
+ pair = (sig! + sig.num)\named('value', 'delay')
+ pattern = -evt.clock + sig.num + pair*0
inputify = (step) ->
{
diff --git a/alv-lib/util.moon b/alv-lib/util.moon
index 350c087..a2142fa 100644
--- a/alv-lib/util.moon
+++ b/alv-lib/util.moon
@@ -1,4 +1,4 @@
-import Constant, Op, Input, T, val, evt from require 'alv.base'
+import Constant, Op, Input, T, sig, evt from require 'alv.base'
all_same = (list) ->
for v in *list[2,]
@@ -19,8 +19,8 @@ switch_ = Constant.meta
(indexed starting from 0) is reproduced."
value: class extends Op
- val_or_evt = (val! / evt!)!
- pattern = (val.num / val.bool) + val_or_evt*0
+ val_or_evt = (sig! / evt!)!
+ pattern = (sig.num / sig.bool) + val_or_evt*0
setup: (inputs) =>
{ i, values } = pattern\match inputs
@@ -55,7 +55,7 @@ edge = Constant.meta
value: class extends Op
setup: (inputs) =>
@out or= T.bang\mk_evt!
- value = val.bool\match inputs
+ value = sig.bool\match inputs
super value: Input.hot value
tick: =>
diff --git a/alv/base/init.moon b/alv/base/init.moon
index 65730a3..586a6bd 100644
--- a/alv/base/init.moon
+++ b/alv/base/init.moon
@@ -11,7 +11,7 @@
-- @see FnDef
-- @see Input
-- @see base.match.const
--- @see base.match.val
+-- @see base.match.sig
-- @see base.match.evt
-- @see Constant
-- @see SigStream
@@ -29,7 +29,7 @@ import PureOp from require 'alv.base.pureop'
import Builtin from require 'alv.base.builtin'
import FnDef from require 'alv.base.fndef'
import Input from require 'alv.base.input'
-import const, val, evt from require 'alv.base.match'
+import const, sig, evt from require 'alv.base.match'
import Constant, SigStream, EvtStream, IOStream from require 'alv.result'
import T, Primitive, Array, Struct from require 'alv.type'
import RTNode from require 'alv.rtnode'
@@ -40,7 +40,7 @@ import Error from require 'alv.error'
:Builtin
:FnDef
:Input
- :const, :val, :evt
+ :const, :sig, :evt
-- redundant exports, to keep anything an extension might need in one import
diff --git a/alv/base/match.moon b/alv/base/match.moon
index 65f53b1..4653107 100644
--- a/alv/base/match.moon
+++ b/alv/base/match.moon
@@ -9,9 +9,9 @@
-- `Repeat`, `Sequence`, `Choice`, and `Optional`. They can be used directly,
-- but there is also a number of shorthands for assembling patterns quickly:
--
--- - `const()`, `val()` and `evt()`: Shorthands for `Type('='), Type('~'), Type('!')`
+-- - `const()`, `sig()` and `evt()`: Shorthands for `Type('='), Type('~'), Type('!')`
-- - `const.sym`: Shorthand for `Type('=', T.sym)`
--- - `val.num`: Shorthand for `Type('~', T.num)`
+-- - `sig.num`: Shorthand for `Type('~', T.num)`
-- - `evt.str`: Shorthand for `Type('!', T.str)`
-- - `pat * 2`: Shorthand for `Repeat(pat, 1, 2)` (1-4 times `pat`)
-- - `pat * 0`: Shorthand for `Repeat(pat, 1, nil)` (1-* times `pat`)
@@ -29,7 +29,7 @@
-- Recalling patterns will memorize the first RTNode they match, and
-- only match further RTNodes of the same type. For example
--
--- arg = (val.num / val.str)!
+-- arg = (sig.num / sig.str)!
-- pattern = arg + arg
--
-- ...will match either two numbers or two strings, but not one number and one
@@ -39,7 +39,7 @@
-- sequence of keys that are used instead of integers when constructing the
-- capture table:
--
--- pattern = (val.str + val.num):named('key', 'value')
+-- pattern = (sig.str + sig.num):named('key', 'value')
-- pattern:match(...)
-- -- returns { {key='a', value=1}, {key='b', value=2}, ...}
--
@@ -282,12 +282,12 @@ const = setmetatable {}, {
-- Call or index with a string to obtain a `Type` instance.
-- Call to obtain a wildcard pattern.
--
--- val.str, val.num
--- val['vec3'], val(T.vec3)
--- val()
+-- sig.str, sig.num
+-- sig['vec3'], sig(T.vec3)
+-- sig()
--
--- @table val
-val = setmetatable {}, {
+-- @table sig
+sig = setmetatable {}, {
__index: (key) =>
with v = Type '~', T[key]
@[key] = v
@@ -315,5 +315,5 @@ evt = setmetatable {}, {
{
:Type, :Repeat, :Sequence, :Choice, :Optional
- :const, :val, :evt
+ :const, :sig, :evt
}
diff --git a/alv/builtins.moon b/alv/builtins.moon
index 0d88ade..5be6846 100644
--- a/alv/builtins.moon
+++ b/alv/builtins.moon
@@ -5,7 +5,7 @@
-- documentation.
--
-- @module builtins
-import Builtin, Op, PureOp, T, FnDef, Input, const, val, evt, Struct, Array
+import Builtin, Op, PureOp, T, FnDef, Input, const, sig, evt, Struct, Array
from require 'alv.base'
import Constant from require 'alv.result'
import Error from require 'alv.error'
@@ -329,7 +329,7 @@ print_ = Constant.meta
value: class extends Op
setup: (inputs) =>
- value = (val.str / evt.str)\match inputs
+ value = (sig.str / evt.str)\match inputs
super value: Input.hot value
tick: =>
@@ -361,7 +361,7 @@ Casts !-stream to ~-stream by always reproducing the last received value.
Since ~-streams cannot be emtpy, specifying an `initial` value is necessary."
value: class extends Op
setup: (inputs) =>
- { event, initial } = (evt! + val!)\match inputs
+ { event, initial } = (evt! + sig!)\match inputs
assert event\type! == initial\type!,
Error 'argument', "~ arguments have to be of the same type"
@@ -383,7 +383,7 @@ to_evt = Constant.meta
- if `val` is a !-stream, emits a bang for each incoming event.
- if `trig` is given, samples `sig` as a new event when `trig` arrives."
value: class extends Op
- pattern = (val! + evt.bang) / (val! / evt!)\rep(1,1)
+ pattern = (sig! + evt.bang) / (sig! / evt!)\rep(1,1)
setup: (inputs) =>
{ sig, trig } = pattern\match inputs
if trig
@@ -409,7 +409,7 @@ array = Constant.meta
description: "Produces an array of values."
value: do
- any = val! / evt!
+ any = sig! / evt!
class extends PureOp
pattern: any!*0
@@ -428,7 +428,7 @@ struct = Constant.meta
value: do
key = const.str / const.sym
- val = val! / evt!
+ val = sig! / evt!
pair = (key + val)\named 'key', 'val'
class extends PureOp
@@ -447,7 +447,7 @@ get = Constant.meta
examples: { '(get val key [key2…])' }
value: class extends Op
- pattern = (val! / evt!) + (const.str / const.sym / const.num)*0
+ pattern = (sig! / evt!) + (const.str / const.sym / const.num)*0
setup: (inputs) =>
{ val, keys } = pattern\match inputs
super val: Input.hot val
diff --git a/docs/internals/extensions.md b/docs/internals/extensions.md
index 29cc075..0140e15 100644
--- a/docs/internals/extensions.md
+++ b/docs/internals/extensions.md
@@ -79,14 +79,14 @@ and the `Scope` the evaluation happened in. Ops generally shouldn't use the
scope, but might look up 'magic' dynamic symbols like `\*clock\*`.
#### argument parsing
-Arguments should be parsed using `base.match`. The two exports `base.match.val`
+Arguments should be parsed using `base.match`. The two exports `base.match.sig`
and `base.match.evt` are used to build complex patterns that can parse and
validate the Op arguments into complex structures (see the module documentation
for more information).
- import val, evt from require 'alv.base'
+ import sig, evt from require 'alv.base'
- pattern = evt.bang + val.str + val.num*3 + -evt!
+ pattern = evt.bang + sig.str + sig.num*3 + -evt!
{ trig, str, numbers, optional } = pattern\match inputs
This example matches first an `EvtStream` of type `bang`, then a `SigStream`
diff --git a/spec/match_spec.moon b/spec/match_spec.moon
index 0047fd4..0f06c64 100644
--- a/spec/match_spec.moon
+++ b/spec/match_spec.moon
@@ -1,4 +1,4 @@
-import const, val, evt from require 'alv.base.match'
+import const, sig, evt from require 'alv.base.match'
import Op, Input from require 'alv.base'
import RTNode, T, Error from require 'alv'
@@ -18,13 +18,13 @@ mk_evt = (type, const) ->
result = T[type]\mk_evt!
RTNode :result, op: op_with_inputs { Input.hot result }
-describe 'val and evt', ->
+describe 'sig and evt', ->
describe 'type-less shorthand', ->
it 'matches metatype', ->
str = mk_val 'str'
num = mk_val 'num'
- assert.is.equal str, val!\match { str }
- assert.is.equal num, val!\match { num }
+ assert.is.equal str, sig!\match { str }
+ assert.is.equal num, sig!\match { num }
assert.has.error -> const!\match { str }
assert.has.error -> const!\match { num }
assert.has.error -> evt!\match { str }
@@ -32,8 +32,8 @@ describe 'val and evt', ->
str = mk_evt 'str'
num = mk_evt 'num'
- assert.has.error -> val!\match { str }
- assert.has.error -> val!\match { num }
+ assert.has.error -> sig!\match { str }
+ assert.has.error -> sig!\match { num }
assert.has.error -> const!\match { str }
assert.has.error -> const!\match { num }
assert.is.equal str, evt!\match { str }
@@ -41,15 +41,15 @@ describe 'val and evt', ->
str = mk_const 'str'
num = mk_const 'num'
- assert.is.equal str, val!\match { str }
- assert.is.equal num, val!\match { num }
+ assert.is.equal str, sig!\match { str }
+ assert.is.equal num, sig!\match { num }
assert.is.equal str, const!\match { str }
assert.is.equal num, const!\match { num }
assert.has.error -> evt!\match { str }
assert.has.error -> evt!\match { num }
it 'can recall the type', ->
- value = val!!
+ value = sig!!
event = evt!!
two_equal_values = value + value
two_equal_events = event + event
@@ -77,14 +77,14 @@ describe 'val and evt', ->
it 'stringifies well', ->
assert.is.equal 'any=', tostring const!
assert.is.equal 'any!', tostring evt!
- assert.is.equal 'any~', tostring val!
+ assert.is.equal 'any~', tostring sig!
describe 'typed shorthand', ->
it 'matches by metatype', ->
str = mk_val 'str'
num = mk_val 'num'
- assert.is.equal str, val.str\match { str }
- assert.is.equal num, val.num\match { num }
+ assert.is.equal str, sig.str\match { str }
+ assert.is.equal num, sig.num\match { num }
assert.has.error -> const.str\match { str }
assert.has.error -> const.num\match { num }
assert.has.error -> evt.str\match { str }
@@ -92,8 +92,8 @@ describe 'val and evt', ->
str = mk_evt 'str'
num = mk_evt 'num'
- assert.has.error -> val.str\match { str }
- assert.has.error -> val.num\match { num }
+ assert.has.error -> sig.str\match { str }
+ assert.has.error -> sig.num\match { num }
assert.has.error -> const.str\match { str }
assert.has.error -> const.num\match { num }
assert.is.equal str, evt.str\match { str }
@@ -101,8 +101,8 @@ describe 'val and evt', ->
str = mk_const 'str'
num = mk_const 'num'
- assert.is.equal str, val.str\match { str }
- assert.is.equal num, val.num\match { num }
+ assert.is.equal str, sig.str\match { str }
+ assert.is.equal num, sig.num\match { num }
assert.is.equal str, const.str\match { str }
assert.is.equal num, const.num\match { num }
assert.has.error -> evt.str\match { str }
@@ -111,21 +111,21 @@ describe 'val and evt', ->
it 'matches by type', ->
str = mk_const 'str'
num = mk_const 'num'
- assert.is.equal str, val.str\match { str }
- assert.is.equal num, val.num\match { num }
+ assert.is.equal str, sig.str\match { str }
+ assert.is.equal num, sig.num\match { num }
assert.is.equal str, const.str\match { str }
assert.is.equal num, const.num\match { num }
- assert.has.error -> val.num\match { str }
- assert.has.error -> val.str\match { num }
+ assert.has.error -> sig.num\match { str }
+ assert.has.error -> sig.str\match { num }
str = mk_val 'str'
num = mk_val 'num'
- assert.is.equal str, val.str\match { str }
- assert.is.equal num, val.num\match { num }
+ assert.is.equal str, sig.str\match { str }
+ assert.is.equal num, sig.num\match { num }
assert.has.error -> const.num\match { str }
assert.has.error -> const.str\match { num }
- assert.has.error -> val.num\match { str }
- assert.has.error -> val.str\match { num }
+ assert.has.error -> sig.num\match { str }
+ assert.has.error -> sig.str\match { num }
str = mk_evt 'str'
num = mk_evt 'num'
@@ -139,8 +139,8 @@ describe 'val and evt', ->
it 'stringifies well', ->
assert.is.equal 'str!', tostring evt.str
assert.is.equal 'num!', tostring evt.num
- assert.is.equal 'str~', tostring val.str
- assert.is.equal 'num~', tostring val.num
+ assert.is.equal 'str~', tostring sig.str
+ assert.is.equal 'num~', tostring sig.num
assert.is.equal 'str=', tostring const.str
assert.is.equal 'num=', tostring const.num
@@ -148,7 +148,7 @@ describe 'choice', ->
str = mk_val 'str'
num = mk_val 'num'
bool = mk_val 'bool'
- choice = val.str / val.num
+ choice = sig.str / sig.num
it 'matches either type', ->
assert.is.equal str, choice\match { str }
@@ -167,7 +167,7 @@ describe 'choice', ->
assert.has.error -> same\match { bool, bool }
it 'makes inner types recall', ->
- same = (val! / evt!)!
+ same = (sig! / evt!)!
same = same + same
assert.is.same { str, str }, same\match { str, str }
assert.is.same { num, num }, same\match { num, num }
@@ -182,7 +182,7 @@ describe 'sequence', ->
str = mk_val 'str'
num = mk_val 'num'
bool = mk_evt 'bool'
- seq = val.str + val.num + evt.bool
+ seq = sig.str + sig.num + evt.bool
it 'matches all types in order', ->
assert.is.same { str, num, bool }, seq\match { str, num, bool }
@@ -199,14 +199,14 @@ describe 'sequence', ->
assert.has.error -> seq\match { str, num, bool, bool }
it 'can handle optional children', ->
- opt = -val.str + val.num
+ opt = -sig.str + sig.num
assert.is.same { str, num }, opt\match { str, num }
assert.is.same { nil, num }, opt\match { num }
assert.has.error -> opt\match { str, str, num }
assert.has.error -> opt\match { str, num, num }
it 'can handle repeat children', ->
- rep = val.str + val.num*2
+ rep = sig.str + sig.num*2
assert.is.same { str, {num} }, rep\match { str, num }
assert.is.same { str, {num,num} }, rep\match { str, num, num }
assert.has.error -> rep\match { str }
@@ -222,7 +222,7 @@ describe 'repeat', ->
times = (n, arg) -> return for i=1,n do arg
it '*x is [1,x[', ->
- rep = val.str*3
+ rep = sig.str*3
assert.has.error -> rep\match (times 0, str)
assert.is.same (times 1, str), rep\match (times 1, str)
assert.is.same (times 2, str), rep\match (times 2, str)
@@ -231,7 +231,7 @@ describe 'repeat', ->
assert.has.error -> rep\match (times 3, num)
it '*0 is [1,[', ->
- rep = val.str*0
+ rep = sig.str*0
assert.has.error -> rep\match (times 0, str)
assert.is.same (times 1, str), rep\match (times 1, str)
assert.is.same (times 2, str), rep\match (times 2, str)
@@ -239,7 +239,7 @@ describe 'repeat', ->
assert.has.error -> rep\match (times 3, num)
it '^x is [0,x[', ->
- rep = val.str^3
+ rep = sig.str^3
assert.is.same {}, rep\match {}
assert.is.same (times 1, str), rep\match (times 1, str)
assert.is.same (times 2, str), rep\match (times 2, str)
@@ -248,7 +248,7 @@ describe 'repeat', ->
assert.has.error -> rep\match (times 3, num)
it '^0 is [0,[', ->
- rep = val.str^0
+ rep = sig.str^0
assert.is.same {}, rep\match {}
assert.is.same (times 1, str), rep\match (times 1, str)
assert.is.same (times 2, str), rep\match (times 2, str)
@@ -256,7 +256,7 @@ describe 'repeat', ->
assert.has.error -> rep\match (times 3, num)
it ':rep(min, max) does anything else', ->
- rep = val.str\rep 2, 2
+ rep = sig.str\rep 2, 2
assert.has.error -> rep\match {}
assert.has.error -> rep\match (times 1, str)
assert.is.same (times 2, str), rep\match (times 2, str)
@@ -264,7 +264,7 @@ describe 'repeat', ->
assert.has.error -> rep\match (times 2, num)
it 'works with complex inner types', ->
- rep = (val.num + val.str)\rep 2, 2
+ rep = (sig.num + sig.str)\rep 2, 2
assert.has.error -> rep\match {}
assert.has.error -> rep\match {num, str}
assert.has.error -> rep\match {num, num}
@@ -273,18 +273,18 @@ describe 'repeat', ->
assert.has.error -> rep\match {num, str, num, str, num, str}
it 'stringifies well', ->
- assert.is.equal 'str~{1-3}', tostring val.str*3
- assert.is.equal 'str~{1-*}', tostring val.str*0
- assert.is.equal 'str~{0-*}', tostring val.str^0
- assert.is.equal 'str~{2-2}', tostring val.str\rep 2, 2
+ assert.is.equal 'str~{1-3}', tostring sig.str*3
+ assert.is.equal 'str~{1-*}', tostring sig.str*0
+ assert.is.equal 'str~{0-*}', tostring sig.str^0
+ assert.is.equal 'str~{2-2}', tostring sig.str\rep 2, 2
describe 'complex nesting', ->
bang = mk_evt 'bang'
str = mk_val 'str'
num = mk_val 'num'
num_c = mk_const 'num'
- pattern = -evt.bang + val.num*4 +
- (val.str + (val.num / val.str))\named('key', 'val')^0
+ pattern = -evt.bang + sig.num*4 +
+ (sig.str + (sig.num / sig.str))\named('key', 'val')^0
it 'just works', ->
assert.is.same { bang, { num, num }, {} }, pattern\match { bang, num, num }
diff --git a/spec/pureop_spec.moon b/spec/pureop_spec.moon
index 78dce4d..d2a4a89 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, val, evt from require 'alv.base'
+import PureOp, Input, T, sig, evt from require 'alv.base'
import RTNode from require 'alv'
setup do_setup
teardown do_teardown
class TestPureOp extends PureOp
- pattern: (val.num / val.str / evt.num)*3
+ pattern: (sig.num / sig.str / evt.num)*3
type: T.num
tick: => @out\set 1
@@ -81,9 +81,9 @@ describe 'PureOp', ->
assert.has.error -> invoke_op TestPureOp, { (literal a), (literal b) }
it 'supports nested input patterns', ->
- num = val.num / evt.num
+ num = sig.num / evt.num
class NestedInputOp extends PureOp
- pattern: (num + val.str)\named('a', 'b')\rep 2, 2
+ pattern: (num + sig.str)\named('a', 'b')\rep 2, 2
type: T.num
tick: => @out\set 1
@@ -106,7 +106,7 @@ describe 'PureOp', ->
it 'supports dynamically generating the output type', ->
class DynamicOp extends PureOp
- pattern: val.num + (val! / evt!)
+ pattern: sig.num + (sig! / evt!)
type: (inputs) => inputs[2]\type!
tick: => @out\set @inputs[2]!
typ = spy.on DynamicOp, 'type'