aboutsummaryrefslogtreecommitdiffstats
path: root/alv-lib
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2022-02-05 12:20:36 +0000
committers-ol <s+removethis@s-ol.nu>2025-03-02 14:24:49 +0000
commit7470fee507f49a7b26dd6ecfb262cc4e0da73f18 (patch)
tree407eb2d1a4377f1ddea462f2764981c34c08e03d /alv-lib
parentbase.match: predicate fn matching (diff)
downloadalive-7470fee507f49a7b26dd6ecfb262cc4e0da73f18.tar.gz
alive-7470fee507f49a7b26dd6ecfb262cc4e0da73f18.zip
lib: test and extend string module
Diffstat (limited to 'alv-lib')
-rw-r--r--alv-lib/string.moon34
1 files changed, 32 insertions, 2 deletions
diff --git a/alv-lib/string.moon b/alv-lib/string.moon
index 7508e8d..e4b007c 100644
--- a/alv-lib/string.moon
+++ b/alv-lib/string.moon
@@ -1,4 +1,4 @@
-import PureOp, Constant, Input, T, any from require 'alv.base'
+import PureOp, Constant, Input, T, Array, any from require 'alv.base'
str = Constant.meta
meta:
@@ -8,7 +8,35 @@ str = Constant.meta
value: class extends PureOp
pattern: any!\rep 1, nil
type: T.str
- tick: => @out\set table.concat [tostring i! for i in *@inputs]
+ tick: =>
+ strings = [i\type!\pp i!, true for i in *@inputs]
+ @out\set table.concat strings
+
+join = Constant.meta
+ meta:
+ name: 'join'
+ summary: "Concatenate/stringify values (with separator)"
+ examples: { '(join separator v1 [v2…])' }
+ value: class extends PureOp
+ pattern: any.str + any!\rep 1, nil
+ type: T.str
+ tick: =>
+ strings = [i\type!\pp i!, true for i in *@inputs[2]]
+ @out\set table.concat strings, @inputs[1]!
+
+str_arr = any ((typ) -> typ.__class == Array and typ.type == T.str), "str[]"
+concat = Constant.meta
+ meta:
+ name: 'concat'
+ summary: "Concatenate string arrays."
+ examples: { '(concat [separator] parts)' }
+ value: class extends PureOp
+ pattern: -any.str + str_arr
+ type: T.str
+
+ tick: =>
+ { separator, parts } = @unwrap_all!
+ @out\set table.concat parts, separator
Constant.meta
meta:
@@ -17,3 +45,5 @@ Constant.meta
value:
:str, '..': str
+ :join
+ :concat