functionalscript 0.1.608 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/Cargo.lock +4 -0
- package/Cargo.toml +4 -2
- package/README.md +1 -1
- package/com/cpp/module.f.d.mts +4 -8
- package/com/cpp/module.f.mjs +20 -25
- package/com/cpp/testlib.f.mjs +3 -4
- package/com/cs/module.f.d.mts +4 -8
- package/com/cs/module.f.mjs +18 -23
- package/com/cs/testlib.f.mjs +3 -5
- package/com/rust/module.f.d.mts +3 -7
- package/com/rust/module.f.mjs +25 -30
- package/com/rust/nanocom/src/cobject.rs +1 -1
- package/com/rust/testlib.f.mjs +3 -5
- package/com/test/build.f.d.mts +2 -2
- package/com/test/build.f.mjs +2 -2
- package/com/test/build.mjs +4 -4
- package/com/test/rust/src/lib.rs +4 -4
- package/com/types/module.f.d.mts +5 -10
- package/com/types/module.f.mjs +5 -12
- package/commonjs/build/module.f.d.mts +13 -17
- package/commonjs/build/module.f.mjs +23 -28
- package/commonjs/build/test.f.mjs +4 -4
- package/commonjs/module/function/module.f.d.mts +0 -2
- package/commonjs/module/function/module.f.mjs +0 -2
- package/commonjs/module/module.f.d.mts +16 -21
- package/commonjs/module/module.f.mjs +2 -9
- package/commonjs/module.d.mts +1 -5
- package/commonjs/module.f.d.mts +0 -2
- package/commonjs/module.f.mjs +0 -2
- package/commonjs/module.mjs +2 -7
- package/commonjs/package/dependencies/module.f.d.mts +3 -7
- package/commonjs/package/dependencies/module.f.mjs +5 -10
- package/commonjs/package/dependencies/test.f.mjs +1 -1
- package/commonjs/package/module.f.d.mts +12 -18
- package/commonjs/package/module.f.mjs +6 -13
- package/commonjs/package/test.f.mjs +1 -1
- package/commonjs/path/module.f.d.mts +25 -32
- package/commonjs/path/module.f.mjs +12 -23
- package/commonjs/path/test.f.mjs +11 -11
- package/commonjs/test.mjs +1 -1
- package/dev/module.f.d.mts +1 -4
- package/dev/module.f.mjs +1 -4
- package/dev/module.mjs +1 -1
- package/dev/test/module.f.d.mts +2 -3
- package/dev/test/module.f.mjs +5 -7
- package/djs/module.f.d.mts +13 -18
- package/djs/module.f.mjs +12 -19
- package/djs/parser/module.f.d.mts +53 -37
- package/djs/parser/module.f.mjs +278 -131
- package/djs/parser/test.f.d.mts +4 -0
- package/djs/parser/test.f.mjs +186 -70
- package/djs/test.f.mjs +4 -4
- package/djs/tokenizer/module.f.d.mts +6 -10
- package/djs/tokenizer/module.f.mjs +19 -22
- package/djs/tokenizer/test.f.mjs +7 -7
- package/doc/LANGUAGE.md +17 -16
- package/doc/README.md +14 -50
- package/fsc/README.md +0 -3
- package/fsc/module.f.d.mts +4 -9
- package/fsc/module.f.mjs +17 -24
- package/fsc/test.f.mjs +3 -3
- package/fsm/README.md +1 -1
- package/fsm/module.f.d.mts +13 -20
- package/fsm/module.f.mjs +27 -38
- package/fsm/test.f.mjs +8 -8
- package/html/README.md +24 -0
- package/html/module.f.d.mts +7 -12
- package/html/module.f.mjs +14 -23
- package/html/test.f.mjs +4 -4
- package/issues/01-test-debug.md +3 -0
- package/issues/{publish.md → 05-publish.md} +8 -8
- package/issues/17-djs-extension.md +6 -0
- package/issues/README.md +20 -13
- package/issues/lang/1000-json.md +38 -0
- package/issues/lang/2110-default-export.md +2 -2
- package/issues/lang/2310-undefined.md +1 -1
- package/issues/lang/2330-property-accessor.md +225 -0
- package/issues/lang/2360-built-in.md +54 -47
- package/issues/lang/3240-export.md +44 -0
- package/issues/lang/README.md +64 -22
- package/issues/test.f.d.mts +16 -0
- package/issues/test.f.mjs +57 -0
- package/js/tokenizer/module.f.d.mts +18 -17
- package/js/tokenizer/module.f.mjs +80 -61
- package/js/tokenizer/test.f.mjs +15 -12
- package/json/module.f.d.mts +18 -26
- package/json/module.f.mjs +18 -31
- package/json/parser/module.f.d.mts +9 -13
- package/json/parser/module.f.mjs +9 -14
- package/json/parser/test.f.mjs +7 -7
- package/json/serializer/module.f.d.mts +11 -20
- package/json/serializer/module.f.mjs +14 -29
- package/json/serializer/test.f.mjs +2 -2
- package/json/test.f.mjs +3 -3
- package/json/tokenizer/module.f.d.mts +6 -10
- package/json/tokenizer/module.f.mjs +16 -20
- package/json/tokenizer/test.f.mjs +6 -6
- package/jsr.json +1 -1
- package/nanvm-lib/Cargo.toml +6 -0
- package/nanvm-lib/src/extension.rs +119 -0
- package/nanvm-lib/src/interface.rs +136 -0
- package/nanvm-lib/src/lib.rs +7 -0
- package/nanvm-lib/src/naive.rs +229 -0
- package/nanvm-lib/src/nanenum.rs +230 -0
- package/nanvm-lib/src/nullish.rs +7 -0
- package/nanvm-lib/src/sign.rs +5 -0
- package/nanvm-lib/src/simple.rs +32 -0
- package/nanvm-lib/tests/test.f.d.mts +36 -0
- package/nanvm-lib/tests/test.f.mjs +79 -0
- package/nanvm-lib/tests/test.rs +108 -0
- package/nodejs/version/main.mjs +1 -1
- package/nodejs/version/module.f.d.mts +4 -9
- package/nodejs/version/module.f.mjs +2 -7
- package/nodejs/version/test.f.mjs +3 -3
- package/package.json +1 -1
- package/prime_field/module.f.d.mts +20 -23
- package/prime_field/module.f.mjs +9 -12
- package/prime_field/test.f.mjs +1 -1
- package/secp/module.f.d.mts +27 -28
- package/secp/module.f.mjs +38 -39
- package/secp/test.f.mjs +4 -4
- package/sha2/module.f.d.mts +8 -16
- package/sha2/module.f.mjs +7 -20
- package/sha2/test.f.mjs +4 -4
- package/text/README.md +2 -2
- package/text/ascii/module.f.d.mts +69 -72
- package/text/ascii/module.f.mjs +5 -10
- package/text/ascii/test.f.mjs +3 -3
- package/text/module.f.d.mts +9 -14
- package/text/module.f.mjs +7 -14
- package/text/sgr/module.f.d.mts +7 -9
- package/text/sgr/module.f.mjs +2 -4
- package/text/test.f.mjs +3 -3
- package/text/utf16/module.f.d.mts +8 -15
- package/text/utf16/module.f.mjs +17 -28
- package/text/utf16/test.f.mjs +5 -5
- package/text/utf8/module.f.d.mts +4 -9
- package/text/utf8/module.f.mjs +9 -16
- package/text/utf8/test.f.mjs +4 -4
- package/types/array/module.f.d.mts +14 -24
- package/types/array/module.f.mjs +8 -25
- package/types/array/test.f.mjs +3 -3
- package/types/bigfloat/module.f.d.mts +4 -9
- package/types/bigfloat/module.f.mjs +3 -10
- package/types/bigfloat/test.f.mjs +1 -1
- package/types/bigint/module.f.d.mts +16 -64
- package/types/bigint/module.f.mjs +11 -30
- package/types/bigint/test.f.mjs +1 -1
- package/types/btree/find/module.f.d.mts +20 -26
- package/types/btree/find/module.f.mjs +8 -17
- package/types/btree/find/test.f.mjs +7 -7
- package/types/btree/module.f.d.mts +4 -8
- package/types/btree/module.f.mjs +6 -11
- package/types/btree/remove/module.f.d.mts +7 -12
- package/types/btree/remove/module.f.mjs +10 -17
- package/types/btree/remove/test.f.mjs +5 -5
- package/types/btree/set/module.f.d.mts +3 -7
- package/types/btree/set/module.f.mjs +4 -9
- package/types/btree/set/test.f.mjs +4 -4
- package/types/btree/test.f.mjs +9 -9
- package/types/btree/types/module.f.d.mts +0 -2
- package/types/btree/types/module.f.mjs +0 -2
- package/types/byte_set/module.f.d.mts +16 -29
- package/types/byte_set/module.f.mjs +14 -39
- package/types/byte_set/test.f.mjs +5 -5
- package/types/function/compare/module.f.d.mts +9 -15
- package/types/function/compare/module.f.mjs +3 -12
- package/types/function/compare/test.f.mjs +1 -1
- package/types/function/module.f.d.mts +20 -27
- package/types/function/module.f.mjs +4 -15
- package/types/function/operator/module.f.d.mts +28 -43
- package/types/function/operator/module.f.mjs +14 -41
- package/types/function/test.f.mjs +1 -1
- package/types/list/module.f.d.mts +56 -91
- package/types/list/module.f.mjs +45 -114
- package/types/list/test.f.mjs +10 -10
- package/types/map/module.f.d.mts +15 -24
- package/types/map/module.f.mjs +15 -30
- package/types/map/test.f.mjs +2 -2
- package/types/nibble_set/module.f.d.mts +10 -20
- package/types/nibble_set/module.f.mjs +7 -24
- package/types/nibble_set/test.f.mjs +2 -2
- package/types/nullable/module.f.d.mts +3 -8
- package/types/nullable/module.f.mjs +2 -9
- package/types/nullable/test.f.mjs +1 -1
- package/types/number/module.f.d.mts +7 -13
- package/types/number/module.f.mjs +8 -19
- package/types/number/test.f.mjs +1 -1
- package/types/object/module.f.d.mts +11 -18
- package/types/object/module.f.mjs +9 -20
- package/types/object/test.f.mjs +1 -1
- package/types/range/module.f.d.mts +3 -8
- package/types/range/module.f.mjs +2 -9
- package/types/range/test.f.mjs +1 -1
- package/types/range_map/module.f.d.mts +9 -15
- package/types/range_map/module.f.mjs +9 -18
- package/types/range_map/test.f.mjs +32 -32
- package/types/result/module.d.mts +3 -3
- package/types/result/module.f.d.mts +6 -12
- package/types/result/module.f.mjs +3 -12
- package/types/result/module.mjs +2 -2
- package/types/sorted_list/module.f.d.mts +22 -28
- package/types/sorted_list/module.f.mjs +10 -19
- package/types/sorted_list/test.f.mjs +7 -7
- package/types/sorted_set/module.f.d.mts +6 -12
- package/types/sorted_set/module.f.mjs +7 -16
- package/types/sorted_set/test.f.mjs +7 -7
- package/types/string/module.f.d.mts +8 -14
- package/types/string/module.f.mjs +10 -21
- package/types/string/test.f.mjs +2 -2
- package/types/string_set/module.f.d.mts +8 -16
- package/types/string_set/module.f.mjs +12 -27
- package/types/string_set/test.f.mjs +1 -1
- package/issues/lang/2351-property-accessor.md +0 -44
- package/issues/lang/2352-property-call.md +0 -43
- package/issues/lang/2353-property-at.md +0 -19
- package/issues/test-debug.md +0 -12
- /package/issues/{esm.md → 02-esm.md} +0 -0
- /package/issues/{djs.md → 03-djs.md} +0 -0
- /package/issues/{fs-load.md → 11-fs-load.md} +0 -0
- /package/issues/lang/{2330-grouping.md → 2350-grouping.md} +0 -0
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
import
|
|
2
|
-
import compare from '../function/compare/module.f.mjs'
|
|
1
|
+
import * as _ from './module.f.mjs'
|
|
2
|
+
import * as compare from '../function/compare/module.f.mjs'
|
|
3
3
|
const { unsafeCmp } = compare
|
|
4
|
-
import
|
|
5
|
-
import object from '../object/module.f.mjs'
|
|
4
|
+
import * as json from '../../json/module.f.mjs'
|
|
5
|
+
import * as object from '../object/module.f.mjs'
|
|
6
6
|
const { sort } = object
|
|
7
|
-
import
|
|
8
|
-
import list from '../list/module.f.mjs'
|
|
9
|
-
import operator from '../function/operator/module.f.mjs'
|
|
7
|
+
import * as sortedSet from '../sorted_set/module.f.mjs'
|
|
8
|
+
import * as list from '../list/module.f.mjs'
|
|
9
|
+
import * as operator from '../function/operator/module.f.mjs'
|
|
10
10
|
|
|
11
|
-
/** @type {(a: readonly
|
|
11
|
+
/** @type {(a: readonly json.Unknown[]) => string} */
|
|
12
12
|
const stringify = json.stringify(sort)
|
|
13
13
|
|
|
14
|
-
/** @type {
|
|
14
|
+
/** @type {_.Operators<sortedSet.SortedSet<string>>} */
|
|
15
15
|
const op = { union: sortedSet.union(unsafeCmp), equal: list.equal(operator.strictEqual) }
|
|
16
16
|
|
|
17
17
|
export default {
|
|
18
18
|
merge: [
|
|
19
19
|
() => {
|
|
20
|
-
/** @type {
|
|
20
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
21
21
|
const a = [[['a'], 1], [['b'], 2]]
|
|
22
|
-
/** @type {
|
|
22
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
23
23
|
const b = null
|
|
24
24
|
const merged = _.merge(op)(a)(b)
|
|
25
25
|
const result = stringify(list.toArray(merged))
|
|
26
26
|
if (result !== '[[["a"],1],[["b"],2]]') { throw result }
|
|
27
27
|
},
|
|
28
28
|
() => {
|
|
29
|
-
/** @type {
|
|
29
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
30
30
|
const a = null
|
|
31
|
-
/** @type {
|
|
31
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
32
32
|
const b = [[['a'], 1], [['b'], 2]]
|
|
33
33
|
const merged = _.merge(op)(a)(b)
|
|
34
34
|
const result = stringify(list.toArray(merged))
|
|
35
35
|
if (result !== '[[["a"],1],[["b"],2]]') { throw result }
|
|
36
36
|
},
|
|
37
37
|
() => {
|
|
38
|
-
/** @type {
|
|
38
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
39
39
|
const a = [[['a'], 1], [['b'], 2]]
|
|
40
|
-
/** @type {
|
|
40
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
41
41
|
const b = [[['a'], 1], [['b'], 2]]
|
|
42
42
|
const merged = _.merge(op)(a)(b)
|
|
43
43
|
const result = stringify(list.toArray(merged))
|
|
44
44
|
if (result !== '[[["a"],1],[["b"],2]]') { throw result }
|
|
45
45
|
},
|
|
46
46
|
() => {
|
|
47
|
-
/** @type {
|
|
47
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
48
48
|
const a = [[['a'], 1], [['c'], 3]]
|
|
49
|
-
/** @type {
|
|
49
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
50
50
|
const b = [[['b'], 2], [['d'], 4]]
|
|
51
51
|
const merged = _.merge(op)(a)(b)
|
|
52
52
|
const result = stringify(list.toArray(merged))
|
|
53
53
|
if (result !== '[[["a","b"],1],[["b","c"],2],[["c","d"],3],[["d"],4]]') { throw result }
|
|
54
54
|
},
|
|
55
55
|
() => {
|
|
56
|
-
/** @type {
|
|
56
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
57
57
|
const a = [[['a'], 1], [['d'], 4]]
|
|
58
|
-
/** @type {
|
|
58
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
59
59
|
const b = [[['b'], 2], [['c'], 3]]
|
|
60
60
|
const merged = _.merge(op)(a)(b)
|
|
61
61
|
const result = stringify(list.toArray(merged))
|
|
62
62
|
if (result !== '[[["a","b"],1],[["b","d"],2],[["c","d"],3],[["d"],4]]') { throw result }
|
|
63
63
|
},
|
|
64
64
|
() => {
|
|
65
|
-
/** @type {
|
|
65
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
66
66
|
const a = [[['a'], 1], [['b'], 2]]
|
|
67
|
-
/** @type {
|
|
67
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
68
68
|
const b = [[['b'], 1], [['a'], 2]]
|
|
69
69
|
const merged = _.merge(op)(a)(b)
|
|
70
70
|
const result = stringify(list.toArray(merged))
|
|
71
71
|
if (result !== '[[["a","b"],2]]') { throw result }
|
|
72
72
|
},
|
|
73
73
|
() => {
|
|
74
|
-
/** @type {
|
|
74
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
75
75
|
const a = [[['a'], 1], [['b'], 2], [['a'], 3]]
|
|
76
|
-
/** @type {
|
|
76
|
+
/** @type {_.RangeMap<sortedSet.SortedSet<string>>} */
|
|
77
77
|
const b = [[['a'], 5]]
|
|
78
78
|
const merged = _.merge(op)(a)(b)
|
|
79
79
|
const result = stringify(list.toArray(merged))
|
|
@@ -81,54 +81,54 @@ export default {
|
|
|
81
81
|
}
|
|
82
82
|
],
|
|
83
83
|
get: () => {
|
|
84
|
-
/** @type {
|
|
84
|
+
/** @type {sortedSet.SortedSet<string>} */
|
|
85
85
|
const sortedSetEmpty = []
|
|
86
86
|
const get = _.get(sortedSetEmpty)
|
|
87
87
|
return [
|
|
88
88
|
() => {
|
|
89
|
-
/** @type {
|
|
89
|
+
/** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
|
|
90
90
|
const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
|
|
91
91
|
const result = stringify(get(5)(rm))
|
|
92
92
|
if (result !== '["a"]') { throw result }
|
|
93
93
|
},
|
|
94
94
|
() => {
|
|
95
|
-
/** @type {
|
|
95
|
+
/** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
|
|
96
96
|
const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
|
|
97
97
|
const result = stringify(get(10)(rm))
|
|
98
98
|
if (result !== '["a"]') { throw result }
|
|
99
99
|
},
|
|
100
100
|
() => {
|
|
101
|
-
/** @type {
|
|
101
|
+
/** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
|
|
102
102
|
const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
|
|
103
103
|
const result = stringify(get(15)(rm))
|
|
104
104
|
if (result !== '["b"]') { throw result }
|
|
105
105
|
},
|
|
106
106
|
() => {
|
|
107
|
-
/** @type {
|
|
107
|
+
/** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
|
|
108
108
|
const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
|
|
109
109
|
const result = stringify(get(20)(rm))
|
|
110
110
|
if (result !== '["b"]') { throw result }
|
|
111
111
|
},
|
|
112
112
|
() => {
|
|
113
|
-
/** @type {
|
|
113
|
+
/** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
|
|
114
114
|
const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
|
|
115
115
|
const result = stringify(get(25)(rm))
|
|
116
116
|
if (result !== '["c"]') { throw result }
|
|
117
117
|
},
|
|
118
118
|
() => {
|
|
119
|
-
/** @type {
|
|
119
|
+
/** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
|
|
120
120
|
const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
|
|
121
121
|
const result = stringify(get(30)(rm))
|
|
122
122
|
if (result !== '["c"]') { throw result }
|
|
123
123
|
},
|
|
124
124
|
() => {
|
|
125
|
-
/** @type {
|
|
125
|
+
/** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
|
|
126
126
|
const rm = [[['a'], 10], [['b'], 20], [['c'], 30]]
|
|
127
127
|
const result = stringify(get(35)(rm))
|
|
128
128
|
if (result !== '[]') { throw result }
|
|
129
129
|
},
|
|
130
130
|
() => {
|
|
131
|
-
/** @type {
|
|
131
|
+
/** @type {_.RangeMapArray<sortedSet.SortedSet<string>>} */
|
|
132
132
|
const rm = []
|
|
133
133
|
const result = stringify(get(10)(rm))
|
|
134
134
|
if (result !== '[]') { throw result }
|
|
@@ -2,6 +2,6 @@ declare namespace _default {
|
|
|
2
2
|
export { tryCatch };
|
|
3
3
|
}
|
|
4
4
|
export default _default;
|
|
5
|
-
/** @type {<T>(f: () => T) =>
|
|
6
|
-
declare const tryCatch: <T>(f: () => T) =>
|
|
7
|
-
import * as
|
|
5
|
+
/** @type {<T>(f: () => T) => result.Result<T, unknown>} */
|
|
6
|
+
declare const tryCatch: <T>(f: () => T) => result.Result<T, unknown>;
|
|
7
|
+
import * as result from './module.f.mjs';
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
declare namespace _default {
|
|
2
|
-
export { ok };
|
|
3
|
-
export { error };
|
|
4
|
-
export { unwrap };
|
|
5
|
-
}
|
|
6
|
-
export default _default;
|
|
7
|
-
export type Ok<T> = readonly ["ok", T];
|
|
8
|
-
export type Error<E> = readonly ["error", E];
|
|
9
|
-
export type Result<T, E> = Ok<T> | Error<E>;
|
|
10
1
|
/**
|
|
11
2
|
* @template T
|
|
12
3
|
* @typedef {readonly['ok', T]} Ok
|
|
@@ -21,8 +12,11 @@ export type Result<T, E> = Ok<T> | Error<E>;
|
|
|
21
12
|
* @typedef {Ok<T>|Error<E>} Result
|
|
22
13
|
*/
|
|
23
14
|
/** @type {<T>(value: T) => Ok<T>} */
|
|
24
|
-
|
|
15
|
+
export const ok: <T>(value: T) => Ok<T>;
|
|
25
16
|
/** @type {<E>(e: E) => Error<E>} */
|
|
26
|
-
|
|
17
|
+
export const error: <E>(e: E) => Error<E>;
|
|
27
18
|
/** @type {<T, E>(r: Result<T, E>) => T} */
|
|
28
|
-
|
|
19
|
+
export const unwrap: <T, E>(r: Result<T, E>) => T;
|
|
20
|
+
export type Ok<T> = readonly ["ok", T];
|
|
21
|
+
export type Error<E> = readonly ["error", E];
|
|
22
|
+
export type Result<T, E> = Ok<T> | Error<E>;
|
|
@@ -16,22 +16,13 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
/** @type {<T>(value: T) => Ok<T>} */
|
|
19
|
-
const ok = value => ['ok', value]
|
|
19
|
+
export const ok = value => ['ok', value]
|
|
20
20
|
|
|
21
21
|
/** @type {<E>(e: E) => Error<E>} */
|
|
22
|
-
const error = e => ['error', e]
|
|
22
|
+
export const error = e => ['error', e]
|
|
23
23
|
|
|
24
24
|
/** @type {<T, E>(r: Result<T, E>) => T} */
|
|
25
|
-
const unwrap = ([kind, v]) => {
|
|
25
|
+
export const unwrap = ([kind, v]) => {
|
|
26
26
|
if (kind === 'error') { throw v }
|
|
27
27
|
return v
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
export default {
|
|
31
|
-
/** @readonly */
|
|
32
|
-
ok,
|
|
33
|
-
/** @readonly */
|
|
34
|
-
error,
|
|
35
|
-
/** @readonly */
|
|
36
|
-
unwrap,
|
|
37
|
-
}
|
package/types/result/module.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as result from './module.f.mjs'
|
|
2
2
|
const { ok, error } = result
|
|
3
3
|
|
|
4
|
-
/** @type {<T>(f: () => T) =>
|
|
4
|
+
/** @type {<T>(f: () => T) => result.Result<T, unknown>} */
|
|
5
5
|
const tryCatch = f => {
|
|
6
6
|
// Side effect: `try catch` is not allowed in FunctionalScript.
|
|
7
7
|
try {
|
|
@@ -1,28 +1,6 @@
|
|
|
1
|
-
declare namespace _default {
|
|
2
|
-
export { merge };
|
|
3
|
-
export { genericMerge };
|
|
4
|
-
export { find };
|
|
5
|
-
}
|
|
6
|
-
export default _default;
|
|
7
|
-
export type SortedList<T> = List.List<T>;
|
|
8
|
-
export type SortedArray<T> = readonly T[];
|
|
9
|
-
export type Cmp<T> = (a: T) => (b: T) => compare.Sign;
|
|
10
|
-
export type ReduceOp<T, S> = (state: S) => (a: T) => (b: T) => readonly [option.Nullable<T>, compare.Sign, S];
|
|
11
|
-
export type TailReduce<T, S> = (state: S) => (tail: List.List<T>) => List.List<T>;
|
|
12
|
-
export type MergeReduce<T, S> = {
|
|
13
|
-
readonly reduceOp: ReduceOp<T, S>;
|
|
14
|
-
readonly tailReduce: TailReduce<T, S>;
|
|
15
|
-
};
|
|
16
|
-
export type CmpReduceOp<T> = ReduceOp<T, null>;
|
|
17
|
-
/**
|
|
18
|
-
* @template T
|
|
19
|
-
* @typedef {ReduceOp<T, null>} CmpReduceOp
|
|
20
|
-
*/
|
|
21
|
-
/** @type {<T>(cmp: Cmp<T>) => (a: SortedList<T>) => (b: SortedList<T>) => SortedList<T>} */
|
|
22
|
-
declare const merge: <T>(cmp: Cmp<T>) => (a: SortedList<T>) => (b: SortedList<T>) => SortedList<T>;
|
|
23
1
|
/**
|
|
24
2
|
* @template T
|
|
25
|
-
* @typedef {
|
|
3
|
+
* @typedef {list.List<T>} SortedList
|
|
26
4
|
*/
|
|
27
5
|
/**
|
|
28
6
|
* @template T
|
|
@@ -40,7 +18,7 @@ declare const merge: <T>(cmp: Cmp<T>) => (a: SortedList<T>) => (b: SortedList<T>
|
|
|
40
18
|
/**
|
|
41
19
|
* @template T
|
|
42
20
|
* @template S
|
|
43
|
-
* @typedef {(state: S) => (tail:
|
|
21
|
+
* @typedef {(state: S) => (tail: list.List<T>) => list.List<T>} TailReduce
|
|
44
22
|
*/
|
|
45
23
|
/**
|
|
46
24
|
* @template T
|
|
@@ -50,10 +28,26 @@ declare const merge: <T>(cmp: Cmp<T>) => (a: SortedList<T>) => (b: SortedList<T>
|
|
|
50
28
|
* readonly tailReduce: TailReduce<T,S>
|
|
51
29
|
* }} MergeReduce
|
|
52
30
|
*/
|
|
53
|
-
/** @type {<T,S>(reduce: MergeReduce<T,S>) => (state: S) => (a:
|
|
54
|
-
|
|
31
|
+
/** @type {<T,S>(reduce: MergeReduce<T,S>) => (state: S) => (a: list.List<T>) => (b: list.List<T>) => list.List<T>} */
|
|
32
|
+
export const genericMerge: <T, S>(reduce: MergeReduce<T, S>) => (state: S) => (a: list.List<T>) => (b: list.List<T>) => list.List<T>;
|
|
33
|
+
/**
|
|
34
|
+
* @template T
|
|
35
|
+
* @typedef {ReduceOp<T, null>} CmpReduceOp
|
|
36
|
+
*/
|
|
37
|
+
/** @type {<T>(cmp: Cmp<T>) => (a: SortedList<T>) => (b: SortedList<T>) => SortedList<T>} */
|
|
38
|
+
export const merge: <T>(cmp: Cmp<T>) => (a: SortedList<T>) => (b: SortedList<T>) => SortedList<T>;
|
|
55
39
|
/** @type {<T>(cmp: Cmp<T>) => (value: T) => (array: SortedArray<T>) => T|null} */
|
|
56
|
-
|
|
57
|
-
|
|
40
|
+
export const find: <T>(cmp: Cmp<T>) => (value: T) => (array: SortedArray<T>) => T | null;
|
|
41
|
+
export type SortedList<T> = list.List<T>;
|
|
42
|
+
export type SortedArray<T> = readonly T[];
|
|
43
|
+
export type Cmp<T> = (a: T) => (b: T) => compare.Sign;
|
|
44
|
+
export type ReduceOp<T, S> = (state: S) => (a: T) => (b: T) => readonly [option.Nullable<T>, compare.Sign, S];
|
|
45
|
+
export type TailReduce<T, S> = (state: S) => (tail: list.List<T>) => list.List<T>;
|
|
46
|
+
export type MergeReduce<T, S> = {
|
|
47
|
+
readonly reduceOp: ReduceOp<T, S>;
|
|
48
|
+
readonly tailReduce: TailReduce<T, S>;
|
|
49
|
+
};
|
|
50
|
+
export type CmpReduceOp<T> = ReduceOp<T, null>;
|
|
51
|
+
import * as list from '../list/module.f.mjs';
|
|
58
52
|
import * as compare from '../function/compare/module.f.mjs';
|
|
59
53
|
import * as option from '../nullable/module.f.mjs';
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// @ts-self-types="./module.f.d.mts"
|
|
2
2
|
import * as compare from '../function/compare/module.f.mjs'
|
|
3
|
-
import
|
|
3
|
+
import * as list from '../list/module.f.mjs'
|
|
4
4
|
import * as option from '../nullable/module.f.mjs'
|
|
5
5
|
const { next } = list
|
|
6
|
-
import f from '../function/module.f.mjs'
|
|
6
|
+
import * as f from '../function/module.f.mjs'
|
|
7
7
|
const { identity } = f
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* @template T
|
|
11
|
-
* @typedef {
|
|
11
|
+
* @typedef {list.List<T>} SortedList
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
/**
|
|
@@ -30,7 +30,7 @@ const { identity } = f
|
|
|
30
30
|
/**
|
|
31
31
|
* @template T
|
|
32
32
|
* @template S
|
|
33
|
-
* @typedef {(state: S) => (tail:
|
|
33
|
+
* @typedef {(state: S) => (tail: list.List<T>) => list.List<T>} TailReduce
|
|
34
34
|
*/
|
|
35
35
|
|
|
36
36
|
/**
|
|
@@ -42,12 +42,12 @@ const { identity } = f
|
|
|
42
42
|
* }} MergeReduce
|
|
43
43
|
*/
|
|
44
44
|
|
|
45
|
-
/** @type {<T,S>(reduce: MergeReduce<T,S>) => (state: S) => (a:
|
|
46
|
-
const genericMerge = ({ reduceOp, tailReduce }) => {
|
|
45
|
+
/** @type {<T,S>(reduce: MergeReduce<T,S>) => (state: S) => (a: list.List<T>) => (b: list.List<T>) => list.List<T>} */
|
|
46
|
+
export const genericMerge = ({ reduceOp, tailReduce }) => {
|
|
47
47
|
/** @typedef {typeof reduceOp extends ReduceOp<infer T, infer S> ? [T, S] : never} TS */
|
|
48
48
|
/** @typedef {TS[0]} T */
|
|
49
49
|
/** @typedef {TS[1]} S */
|
|
50
|
-
/** @type {(state: S) => (a:
|
|
50
|
+
/** @type {(state: S) => (a: list.List<T>) => (b: list.List<T>) => list.List<T>} */
|
|
51
51
|
const f = state => a => b => () => {
|
|
52
52
|
const aResult = next(a)
|
|
53
53
|
if (aResult === null) { return tailReduce(state)(b) }
|
|
@@ -68,7 +68,7 @@ const genericMerge = ({ reduceOp, tailReduce }) => {
|
|
|
68
68
|
*/
|
|
69
69
|
|
|
70
70
|
/** @type {<T>(cmp: Cmp<T>) => (a: SortedList<T>) => (b: SortedList<T>) => SortedList<T>} */
|
|
71
|
-
const merge = cmp => {
|
|
71
|
+
export const merge = cmp => {
|
|
72
72
|
/** @typedef {typeof cmp extends Cmp<infer T> ? T : never} T*/
|
|
73
73
|
/** @type {TailReduce<T, null>} */
|
|
74
74
|
const tailReduce = mergeTail
|
|
@@ -81,11 +81,11 @@ const cmpReduce = cmp => () => a => b => {
|
|
|
81
81
|
return [sign === 1 ? b : a, sign, null]
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
/** @type {() => <T>(tail:
|
|
84
|
+
/** @type {() => <T>(tail: list.List<T>) => list.List<T>} */
|
|
85
85
|
const mergeTail = () => identity
|
|
86
86
|
|
|
87
87
|
/** @type {<T>(cmp: Cmp<T>) => (value: T) => (array: SortedArray<T>) => T|null} */
|
|
88
|
-
const find = cmp => value => array => {
|
|
88
|
+
export const find = cmp => value => array => {
|
|
89
89
|
let b = 0
|
|
90
90
|
let e = array.length - 1
|
|
91
91
|
while (true) {
|
|
@@ -105,12 +105,3 @@ const find = cmp => value => array => {
|
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
|
-
|
|
109
|
-
export default {
|
|
110
|
-
/** @readonly */
|
|
111
|
-
merge,
|
|
112
|
-
/** @readonly */
|
|
113
|
-
genericMerge,
|
|
114
|
-
/** @readonly */
|
|
115
|
-
find
|
|
116
|
-
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import _ from './module.f.mjs'
|
|
2
|
-
import compare from '../function/compare/module.f.mjs'
|
|
1
|
+
import * as _ from './module.f.mjs'
|
|
2
|
+
import * as compare from '../function/compare/module.f.mjs'
|
|
3
3
|
const { unsafeCmp } = compare
|
|
4
|
-
import
|
|
5
|
-
import object from '../object/module.f.mjs'
|
|
4
|
+
import * as json from '../../json/module.f.mjs'
|
|
5
|
+
import * as object from '../object/module.f.mjs'
|
|
6
6
|
const { sort } = object
|
|
7
|
-
import list from '../list/module.f.mjs'
|
|
7
|
+
import * as list from '../list/module.f.mjs'
|
|
8
8
|
const { toArray, countdown, length } = list
|
|
9
9
|
import * as Map from '../map/module.f.mjs'
|
|
10
|
-
import f from '../function/module.f.mjs'
|
|
10
|
+
import * as f from '../function/module.f.mjs'
|
|
11
11
|
const { flip } = f
|
|
12
12
|
|
|
13
|
-
/** @type {(a: readonly
|
|
13
|
+
/** @type {(a: readonly json.Unknown[]) => string} */
|
|
14
14
|
const stringify = json.stringify(sort)
|
|
15
15
|
|
|
16
16
|
/** @type {<T>(a: T) => (b: T) => Map.Sign} */
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
declare namespace _default {
|
|
2
|
-
export { union };
|
|
3
|
-
export { intersect };
|
|
4
|
-
export { has };
|
|
5
|
-
}
|
|
6
|
-
export default _default;
|
|
7
|
-
export type SortedSet<T> = readonly T[];
|
|
8
|
-
export type Cmp<T> = (a: T) => (b: T) => Compare.Sign;
|
|
9
|
-
export type Byte = number;
|
|
10
1
|
/**
|
|
11
2
|
* @template T
|
|
12
3
|
* @typedef {readonly T[]} SortedSet
|
|
@@ -17,9 +8,12 @@ export type Byte = number;
|
|
|
17
8
|
*/
|
|
18
9
|
/** @typedef {number} Byte */
|
|
19
10
|
/** @type {<T>(cmp: Cmp<T>) => (a: SortedSet<T>) => (b: SortedSet<T>) => SortedSet<T>} */
|
|
20
|
-
|
|
11
|
+
export const union: <T>(cmp: Cmp<T>) => (a: SortedSet<T>) => (b: SortedSet<T>) => SortedSet<T>;
|
|
21
12
|
/** @type {<T>(cmp: Cmp<T>) => (a: SortedSet<T>) => (b: SortedSet<T>) => SortedSet<T>} */
|
|
22
|
-
|
|
13
|
+
export const intersect: <T>(cmp: Cmp<T>) => (a: SortedSet<T>) => (b: SortedSet<T>) => SortedSet<T>;
|
|
23
14
|
/** @type {<T>(cmp: Cmp<T>) => (value: T) => (set: SortedSet<T>) => boolean} */
|
|
24
|
-
|
|
15
|
+
export const has: <T>(cmp: Cmp<T>) => (value: T) => (set: SortedSet<T>) => boolean;
|
|
16
|
+
export type SortedSet<T> = readonly T[];
|
|
17
|
+
export type Cmp<T> = (a: T) => (b: T) => Compare.Sign;
|
|
18
|
+
export type Byte = number;
|
|
25
19
|
import * as Compare from '../function/compare/module.f.mjs';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// @ts-self-types="./module.f.d.mts"
|
|
2
2
|
import * as Compare from '../function/compare/module.f.mjs'
|
|
3
|
-
import list from "../list/module.f.mjs"
|
|
3
|
+
import * as list from "../list/module.f.mjs"
|
|
4
4
|
const { toArray } = list
|
|
5
|
-
import
|
|
5
|
+
import * as sortedList from '../sorted_list/module.f.mjs'
|
|
6
6
|
const { merge, genericMerge, find } = sortedList
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -18,30 +18,21 @@ const { merge, genericMerge, find } = sortedList
|
|
|
18
18
|
/** @typedef {number} Byte */
|
|
19
19
|
|
|
20
20
|
/** @type {<T>(cmp: Cmp<T>) => (a: SortedSet<T>) => (b: SortedSet<T>) => SortedSet<T>} */
|
|
21
|
-
const union = cmp => a => b => toArray(merge(cmp)(a)(b))
|
|
21
|
+
export const union = cmp => a => b => toArray(merge(cmp)(a)(b))
|
|
22
22
|
|
|
23
23
|
/** @type {<T>(cmp: Cmp<T>) => (a: SortedSet<T>) => (b: SortedSet<T>) => SortedSet<T>} */
|
|
24
|
-
const intersect = cmp => a => b => toArray(intersectMerge(cmp)(a)(b))
|
|
24
|
+
export const intersect = cmp => a => b => toArray(intersectMerge(cmp)(a)(b))
|
|
25
25
|
|
|
26
26
|
const tailReduce = () => () => null
|
|
27
27
|
|
|
28
|
-
/** @type {<T>(cmp: Cmp<T>) => (a:
|
|
28
|
+
/** @type {<T>(cmp: Cmp<T>) => (a: sortedList.SortedList<T>) => (b: sortedList.SortedList<T>) => sortedList.SortedList<T>} */
|
|
29
29
|
const intersectMerge = cmp => genericMerge({ reduceOp: intersectReduce(cmp), tailReduce })(null)
|
|
30
30
|
|
|
31
|
-
/** @type {<T,S>(cmp: Cmp<T>) =>
|
|
31
|
+
/** @type {<T,S>(cmp: Cmp<T>) => sortedList.ReduceOp<T,S>} */
|
|
32
32
|
const intersectReduce = cmp => state => a => b => {
|
|
33
33
|
const sign = cmp(a)(b)
|
|
34
34
|
return [sign === 0 ? a : null, sign, state]
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
/** @type {<T>(cmp: Cmp<T>) => (value: T) => (set: SortedSet<T>) => boolean} */
|
|
38
|
-
const has = cmp => value => set => find(cmp)(value)(set) === value
|
|
39
|
-
|
|
40
|
-
export default {
|
|
41
|
-
/** @readonly */
|
|
42
|
-
union,
|
|
43
|
-
/** @readonly */
|
|
44
|
-
intersect,
|
|
45
|
-
/** @readonly */
|
|
46
|
-
has
|
|
47
|
-
}
|
|
38
|
+
export const has = cmp => value => set => find(cmp)(value)(set) === value
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import _ from './module.f.mjs'
|
|
2
|
-
import compare from '../function/compare/module.f.mjs'
|
|
1
|
+
import * as _ from './module.f.mjs'
|
|
2
|
+
import * as compare from '../function/compare/module.f.mjs'
|
|
3
3
|
const { unsafeCmp } = compare
|
|
4
|
-
import
|
|
5
|
-
import object from '../object/module.f.mjs'
|
|
4
|
+
import * as json from '../../json/module.f.mjs'
|
|
5
|
+
import * as object from '../object/module.f.mjs'
|
|
6
6
|
const { sort } = object
|
|
7
|
-
import list from '../list/module.f.mjs'
|
|
7
|
+
import * as list from '../list/module.f.mjs'
|
|
8
8
|
const { toArray, countdown, length } = list
|
|
9
9
|
import * as Map from '../map/module.f.mjs'
|
|
10
|
-
import f from '../function/module.f.mjs'
|
|
10
|
+
import * as f from '../function/module.f.mjs'
|
|
11
11
|
const { flip } = f
|
|
12
12
|
|
|
13
|
-
/** @type {(a: readonly
|
|
13
|
+
/** @type {(a: readonly json.Unknown[]) => string} */
|
|
14
14
|
const stringify = a => json.stringify(sort)(a)
|
|
15
15
|
|
|
16
16
|
/** @type {<T>(a: T) => (b: T) => Map.Sign} */
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export { concat };
|
|
4
|
-
export { repeat };
|
|
5
|
-
export { cmp };
|
|
6
|
-
}
|
|
7
|
-
export default _default;
|
|
8
|
-
declare const join: import("../function/module.f.mjs").Func<string, (input: List.List<string>) => string>;
|
|
9
|
-
declare const concat: (input: List.List<string>) => string;
|
|
1
|
+
export const join: f.Func<string, (input: list.List<string>) => string>;
|
|
2
|
+
export const concat: (input: list.List<string>) => string;
|
|
10
3
|
/** @type {(n: string) => (v: number) => string} */
|
|
11
|
-
|
|
12
|
-
/** @type {(a: string) => (b: string) =>
|
|
13
|
-
|
|
14
|
-
import * as
|
|
15
|
-
import * as
|
|
4
|
+
export const repeat: (n: string) => (v: number) => string;
|
|
5
|
+
/** @type {(a: string) => (b: string) => compare.Sign} */
|
|
6
|
+
export const cmp: (a: string) => (b: string) => compare.Sign;
|
|
7
|
+
import * as list from '../list/module.f.mjs';
|
|
8
|
+
import * as f from '../function/module.f.mjs';
|
|
9
|
+
import * as compare from '../function/compare/module.f.mjs';
|
|
@@ -1,33 +1,22 @@
|
|
|
1
1
|
// @ts-self-types="./module.f.d.mts"
|
|
2
|
-
import
|
|
2
|
+
import * as list from '../list/module.f.mjs'
|
|
3
3
|
const { reduce: listReduce, repeat: listRepeat } = list
|
|
4
|
-
import f from '../function/module.f.mjs'
|
|
4
|
+
import * as f from '../function/module.f.mjs'
|
|
5
5
|
const { compose } = f
|
|
6
|
-
import
|
|
6
|
+
import * as compare from '../function/compare/module.f.mjs'
|
|
7
7
|
const { unsafeCmp } = compare
|
|
8
|
-
import
|
|
8
|
+
import * as op from '../function/operator/module.f.mjs'
|
|
9
9
|
const { join: joinOp, concat: concatOp } = op
|
|
10
10
|
|
|
11
|
-
/** @type {(o:
|
|
11
|
+
/** @type {(o: op.Reduce<string>) => (input: list.List<string>) => string} */
|
|
12
12
|
const reduce = o => listReduce(o)('')
|
|
13
13
|
|
|
14
|
-
const join = compose(joinOp)(reduce)
|
|
14
|
+
export const join = compose(joinOp)(reduce)
|
|
15
15
|
|
|
16
|
-
const concat = reduce(concatOp)
|
|
16
|
+
export const concat = reduce(concatOp)
|
|
17
17
|
|
|
18
18
|
/** @type {(n: string) => (v: number) => string} */
|
|
19
|
-
const repeat = v => compose(listRepeat(v))(concat)
|
|
19
|
+
export const repeat = v => compose(listRepeat(v))(concat)
|
|
20
20
|
|
|
21
|
-
/** @type {(a: string) => (b: string) =>
|
|
22
|
-
const cmp = unsafeCmp
|
|
23
|
-
|
|
24
|
-
export default {
|
|
25
|
-
/** @readonly */
|
|
26
|
-
join,
|
|
27
|
-
/** @readonly */
|
|
28
|
-
concat,
|
|
29
|
-
/** @readonly */
|
|
30
|
-
repeat,
|
|
31
|
-
/** @readonly */
|
|
32
|
-
cmp,
|
|
33
|
-
}
|
|
21
|
+
/** @type {(a: string) => (b: string) => compare.Sign} */
|
|
22
|
+
export const cmp = unsafeCmp
|
package/types/string/test.f.mjs
CHANGED
|
@@ -1,21 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export { contains };
|
|
4
|
-
export { set };
|
|
5
|
-
export { values };
|
|
6
|
-
export { fromValues };
|
|
7
|
-
export { remove };
|
|
8
|
-
}
|
|
9
|
-
export default _default;
|
|
10
|
-
export type StringSet = BtreeTypes.Tree<string>;
|
|
11
|
-
declare const empty: null;
|
|
1
|
+
export const values: <T>(tree: BtreeTypes.Tree<T>) => list.List<T>;
|
|
2
|
+
export const empty: null;
|
|
12
3
|
/** @typedef {BtreeTypes.Tree<string>} StringSet */
|
|
13
4
|
/** @type {(value: string) => (set: StringSet) => boolean} */
|
|
14
|
-
|
|
5
|
+
export const contains: (value: string) => (set: StringSet) => boolean;
|
|
15
6
|
/** @type {(value: string) => (s: StringSet) => StringSet} */
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
declare const fromValues: (input: import("../list/module.f.mjs").List<string>) => StringSet;
|
|
7
|
+
export const set: (value: string) => (s: StringSet) => StringSet;
|
|
8
|
+
export const fromValues: (input: list.List<string>) => StringSet;
|
|
19
9
|
/** @type {(value: string) => (s: StringSet) => StringSet} */
|
|
20
|
-
|
|
10
|
+
export const remove: (value: string) => (s: StringSet) => StringSet;
|
|
11
|
+
export type StringSet = BtreeTypes.Tree<string>;
|
|
21
12
|
import * as BtreeTypes from '../btree/types/module.f.mjs';
|
|
13
|
+
import * as list from '../list/module.f.mjs';
|