functionalscript 0.0.344 → 0.0.351
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/.github/workflows/node.js.yml +2 -0
- package/.github/workflows/npm-publish.yml +1 -1
- package/LANGUAGE.md +40 -0
- package/com/README.md +3 -0
- package/com/main.f.js +30 -0
- package/com/test.f.js +23 -0
- package/commonjs/build/{index.js → main.f.js} +7 -7
- package/commonjs/build/{test.js → test.f.js} +6 -6
- package/commonjs/main.f.js +20 -0
- package/commonjs/module/function/{index.js → main.f.js} +1 -1
- package/commonjs/module/{index.js → main.f.js} +3 -1
- package/commonjs/package/dependencies/{index.js → main.f.js} +3 -3
- package/commonjs/package/dependencies/{test.js → test.f.js} +1 -1
- package/commonjs/package/{index.js → main.f.js} +4 -2
- package/commonjs/package/{test.js → test.f.js} +2 -2
- package/commonjs/path/{index.js → main.f.js} +3 -3
- package/commonjs/path/{test.js → test.f.js} +7 -7
- package/dev/{index.js → main.f.js} +0 -0
- package/html/{index.js → main.f.js} +3 -4
- package/html/{test.js → test.f.js} +1 -1
- package/io/commonjs/{index.js → main.js} +3 -3
- package/io/commonjs/test.js +2 -2
- package/io/nodejs/version/{index.js → main.js} +0 -0
- package/io/result/{index.js → main.js} +1 -1
- package/json/{index.js → main.f.js} +31 -29
- package/json/{test.js → test.f.js} +3 -3
- package/json/tokenizer/{index.js → main.f.js} +3 -3
- package/json/tokenizer/{test.js → test.f.js} +4 -4
- package/main.f.js +14 -0
- package/package.json +6 -5
- package/sha2/{index.js → main.f.js} +1 -1
- package/sha2/{test.js → test.f.js} +4 -4
- package/{test.js → test.f.js} +17 -16
- package/text/main.f.js +21 -0
- package/text/test.f.js +18 -0
- package/types/array/{index.js → main.f.js} +1 -2
- package/types/array/{test.js → test.f.js} +3 -3
- package/types/btree/find/{index.js → main.f.js} +4 -4
- package/types/btree/find/{test.js → test.f.js} +7 -7
- package/types/btree/main.f.js +40 -0
- package/types/btree/remove/{index.js → main.f.js} +6 -6
- package/types/btree/remove/{test.js → test.f.js} +6 -6
- package/types/btree/set/{index.js → main.f.js} +4 -4
- package/types/btree/set/{test.js → test.f.js} +5 -5
- package/types/btree/{test.js → test.f.js} +11 -11
- package/types/btree/{index.js → types/main.f.js} +1 -33
- package/types/function/compare/{index.js → main.f.js} +1 -1
- package/types/function/compare/{test.js → test.f.js} +1 -1
- package/types/function/{index.js → main.f.js} +4 -0
- package/types/function/operator/{index.js → main.f.js} +0 -0
- package/types/list/{index.js → main.f.js} +3 -3
- package/types/list/{test.js → test.f.js} +4 -4
- package/types/main.f.js +20 -0
- package/types/map/{index.js → main.f.js} +10 -9
- package/types/map/{test.js → test.f.js} +3 -3
- package/types/object/{index.js → main.f.js} +2 -2
- package/types/object/{test.js → test.f.js} +1 -1
- package/types/option/{index.js → main.f.js} +0 -0
- package/types/range/{index.js → main.f.js} +0 -0
- package/types/range/{test.js → test.f.js} +1 -1
- package/types/result/{index.js → main.f.js} +0 -0
- package/types/{stringSet/index.js → stringset/main.f.js} +9 -10
- package/types/{stringSet/test.js → stringset/test.f.js} +1 -1
- package/commonjs/index.js +0 -11
package/LANGUAGE.md
CHANGED
|
@@ -206,3 +206,43 @@ const f = () => x // < invalid
|
|
|
206
206
|
### 9.7. Block
|
|
207
207
|
|
|
208
208
|
[Block](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block)
|
|
209
|
+
|
|
210
|
+
## 10. Generators
|
|
211
|
+
|
|
212
|
+
For compatibility reason, FunctionalScript allows to create generators as implementation of `[Symbol.iterator]` function. However, it doesn't allow to read the `[Symbol.iterator]` property. For example
|
|
213
|
+
|
|
214
|
+
This code is allowed
|
|
215
|
+
|
|
216
|
+
```js
|
|
217
|
+
/** @type {<T>(list: List<T>) => Iterable<T>} */
|
|
218
|
+
const iterable = list => ({
|
|
219
|
+
*[Symbol.iterator]() {
|
|
220
|
+
let i = list
|
|
221
|
+
while (true) {
|
|
222
|
+
const r = next(i)
|
|
223
|
+
if (r === undefined) { return }
|
|
224
|
+
yield r.first
|
|
225
|
+
i = r.tail
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
})
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
The following code is not allowed, because `iterator` is a mutated object by design in JavaScript.
|
|
232
|
+
|
|
233
|
+
```js
|
|
234
|
+
const it = [0, 1, 2][Symbol.iterator] //< compilation error.
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Use `Iterable` instead of `Iterator`.
|
|
238
|
+
|
|
239
|
+
```js
|
|
240
|
+
const x = () => {
|
|
241
|
+
const a = [0, 1, 2] // iterable
|
|
242
|
+
let sum = 0;
|
|
243
|
+
for (let i in a) {
|
|
244
|
+
sum = sum + i
|
|
245
|
+
}
|
|
246
|
+
return sum;
|
|
247
|
+
}
|
|
248
|
+
```
|
package/com/README.md
ADDED
package/com/main.f.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** @typedef {{readonly[k in string]: Definition}} Library */
|
|
2
|
+
|
|
3
|
+
/** @typedef {Struct|Interface} Definition */
|
|
4
|
+
|
|
5
|
+
/** @typedef {{readonly struct: FieldArray}} Struct */
|
|
6
|
+
|
|
7
|
+
/** @typedef {readonly Field[]} FieldArray */
|
|
8
|
+
|
|
9
|
+
/** @typedef {[string, Type]} Field */
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {{
|
|
13
|
+
* readonly interface: MethodArray
|
|
14
|
+
* readonly guid: string
|
|
15
|
+
* }} Interface
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/** @typedef {readonly Method[]} MethodArray */
|
|
19
|
+
|
|
20
|
+
/** @typedef {readonly[string, FieldArray, Type]} Method */
|
|
21
|
+
|
|
22
|
+
/** @typedef {BaseType|Id|Pointer} Type */
|
|
23
|
+
|
|
24
|
+
/** @typedef {readonly[string]} Id */
|
|
25
|
+
|
|
26
|
+
/** @typedef {'u8'|'i8'|'u16'|'i16'|'u32'|'i32'|'u64'|'i64'|'usize'|'isize'|'f32'|'f64'|'bool'|''} BaseType */
|
|
27
|
+
|
|
28
|
+
/** @typedef {{readonly '*': Type}} Pointer */
|
|
29
|
+
|
|
30
|
+
module.exports = {}
|
package/com/test.f.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
|
|
3
|
+
/** @type {_.Library} */
|
|
4
|
+
const library = {
|
|
5
|
+
Slice: {
|
|
6
|
+
struct: [
|
|
7
|
+
['Start', { '*': 'u8' }],
|
|
8
|
+
['End', 'usize'],
|
|
9
|
+
]
|
|
10
|
+
},
|
|
11
|
+
IMy: {
|
|
12
|
+
guid: 'C66FB270-2D80-49AD-BB6E-88C1F90B805D',
|
|
13
|
+
interface: [
|
|
14
|
+
['GetSlice', [], ['Slice']],
|
|
15
|
+
['SetSlice',
|
|
16
|
+
[['slice', ['Slice']]],
|
|
17
|
+
''
|
|
18
|
+
],
|
|
19
|
+
],
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
module.exports = {}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const package_ = require('../package/
|
|
2
|
-
const module_ = require('../module/
|
|
3
|
-
const function_ = require('../module/function/
|
|
4
|
-
const map = require('../../types/map/
|
|
5
|
-
const object = require('../../types/object/
|
|
6
|
-
const path = require('../path/
|
|
7
|
-
const stringSet = require('../../types/
|
|
1
|
+
const package_ = require('../package/main.f.js')
|
|
2
|
+
const module_ = require('../module/main.f.js')
|
|
3
|
+
const function_ = require('../module/function/main.f.js')
|
|
4
|
+
const map = require('../../types/map/main.f.js')
|
|
5
|
+
const object = require('../../types/object/main.f.js')
|
|
6
|
+
const path = require('../path/main.f.js')
|
|
7
|
+
const stringSet = require('../../types/stringset/main.f.js')
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* @template M
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const _ = require('./
|
|
2
|
-
const map = require('../../types/map/
|
|
3
|
-
const module_ = require('../module/
|
|
4
|
-
const function_ = require('../module/function/
|
|
5
|
-
const result = require('../../types/result/
|
|
6
|
-
const package_ = require('../package/
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const map = require('../../types/map/main.f.js')
|
|
3
|
+
const module_ = require('../module/main.f.js')
|
|
4
|
+
const function_ = require('../module/function/main.f.js')
|
|
5
|
+
const result = require('../../types/result/main.f.js')
|
|
6
|
+
const package_ = require('../package/main.f.js')
|
|
7
7
|
|
|
8
8
|
/** @type {{ readonly [k in string]?: result.Result<function_.Function_, unknown> }} */
|
|
9
9
|
const compileMap = {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** @typedef {(packageName: string) => PackageMap|Package|undefined} PackageMap */
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @typedef {readonly[
|
|
5
|
+
* string,
|
|
6
|
+
* PackageMap,
|
|
7
|
+
* (fileName: string) => string|undefined
|
|
8
|
+
* ]} Package
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
module.exports = {
|
|
12
|
+
/** @readonly */
|
|
13
|
+
build: require('./build/main.f.js'),
|
|
14
|
+
/** @readonly */
|
|
15
|
+
module: require('./module/main.f.js'),
|
|
16
|
+
/** @readonly */
|
|
17
|
+
package: require('./package/main.f.js'),
|
|
18
|
+
/** @readonly */
|
|
19
|
+
path: require('./path/main.f.js'),
|
|
20
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* An IO interface for creating and running module functions.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
const result = require('../../../types/result/
|
|
5
|
+
const result = require('../../../types/result/main.f.js')
|
|
6
6
|
|
|
7
7
|
/** @typedef {<M>(require: Require<M>) => (prior: M) => Result<M>} Function_ */
|
|
8
8
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const object = require('../../types/object/
|
|
1
|
+
const object = require('../../types/object/main.f.js')
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @template M
|
|
@@ -52,6 +52,8 @@ const dir = id => {
|
|
|
52
52
|
const idToString = id => `${id.package}/${id.path.join('/')}`
|
|
53
53
|
|
|
54
54
|
module.exports = {
|
|
55
|
+
/** @readonly */
|
|
56
|
+
function: require('./function/main.f.js'),
|
|
55
57
|
/** @readonly */
|
|
56
58
|
dir,
|
|
57
59
|
/** @readonly */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const json = require('../../../json/
|
|
2
|
-
const
|
|
1
|
+
const json = require('../../../json/main.f.js')
|
|
2
|
+
const list = require('../../../types/list/main.f.js')
|
|
3
3
|
|
|
4
4
|
/** @typedef {readonly[string, string]} DependencyJson */
|
|
5
5
|
|
|
@@ -14,7 +14,7 @@ const isDependencyJson = ([, v]) => typeof v === 'string'
|
|
|
14
14
|
const isDependenciesJson = j => {
|
|
15
15
|
if (j === undefined) { return true }
|
|
16
16
|
if (!json.isObject(j)) { return false }
|
|
17
|
-
return
|
|
17
|
+
return list.every(list.map(isDependencyJson)(Object.entries(j)))
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
module.exports = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const json = require('../../json/
|
|
2
|
-
const dependencies = require('./dependencies/
|
|
1
|
+
const json = require('../../json/main.f.js')
|
|
2
|
+
const dependencies = require('./dependencies/main.f.js')
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @typedef {{
|
|
@@ -31,6 +31,8 @@ const isPackageJson = j => {
|
|
|
31
31
|
*/
|
|
32
32
|
|
|
33
33
|
module.exports = {
|
|
34
|
+
/** @readonly */
|
|
35
|
+
dependencies,
|
|
34
36
|
/** @readonly */
|
|
35
37
|
isPackageJson,
|
|
36
38
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const list = require("../../types/list/
|
|
2
|
-
const package_ = require("../package/
|
|
3
|
-
const module_ = require("../module/
|
|
1
|
+
const list = require("../../types/list/main.f.js")
|
|
2
|
+
const package_ = require("../package/main.f.js")
|
|
3
|
+
const module_ = require("../module/main.f.js")
|
|
4
4
|
|
|
5
5
|
/** @typedef {readonly string[]} Items */
|
|
6
6
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const _ = require('./
|
|
2
|
-
const { todo } = require('../../dev/
|
|
3
|
-
const json = require('../../json/
|
|
4
|
-
const { identity } = require('../../types/function/
|
|
5
|
-
const object = require('../../types/object/
|
|
6
|
-
const { at } = require('../../types/object/
|
|
7
|
-
const package_ = require('../package/
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const { todo } = require('../../dev/main.f.js')
|
|
3
|
+
const json = require('../../json/main.f.js')
|
|
4
|
+
const { identity } = require('../../types/function/main.f.js')
|
|
5
|
+
const object = require('../../types/object/main.f.js')
|
|
6
|
+
const { at } = require('../../types/object/main.f.js')
|
|
7
|
+
const package_ = require('../package/main.f.js')
|
|
8
8
|
|
|
9
9
|
/** @type {(g: json.Unknown|undefined) => string} */
|
|
10
10
|
const stringify = g => {
|
|
File without changes
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
const list = require('../types/list/
|
|
2
|
-
const object = require('../types/object/
|
|
3
|
-
const operator = require('../types/function/
|
|
4
|
-
const { compose } = require('../types/function/index.js')
|
|
1
|
+
const list = require('../types/list/main.f.js')
|
|
2
|
+
const object = require('../types/object/main.f.js')
|
|
3
|
+
const { operator, compose } = require('../types/function/main.f.js')
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
6
|
* @typedef {|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const { tryCatch } = require('../result/
|
|
2
|
-
const { unwrap } = require('../../types/result/
|
|
3
|
-
const moduleFunction = require('../../commonjs/module/function/
|
|
1
|
+
const { tryCatch } = require('../result/main.js')
|
|
2
|
+
const { unwrap } = require('../../types/result/main.f.js')
|
|
3
|
+
const moduleFunction = require('../../commonjs/module/function/main.f.js')
|
|
4
4
|
|
|
5
5
|
/** @type {(f: Function) => moduleFunction.Function_} */
|
|
6
6
|
const build = f => immutableRequire => mutableData => {
|
package/io/commonjs/test.js
CHANGED
|
File without changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const
|
|
2
|
-
const object = require('../types/object/
|
|
3
|
-
const
|
|
4
|
-
const { compose } = require('../types/function/
|
|
1
|
+
const list = require('../types/list/main.f.js')
|
|
2
|
+
const object = require('../types/object/main.f.js')
|
|
3
|
+
const operator = require('../types/function/operator/main.f.js')
|
|
4
|
+
const { compose } = require('../types/function/main.f.js')
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @typedef {{
|
|
@@ -13,11 +13,11 @@ const { compose } = require('../types/function/index.js')
|
|
|
13
13
|
|
|
14
14
|
/** @typedef {Object|boolean|string|number|null|Array} Unknown */
|
|
15
15
|
|
|
16
|
-
/** @type {(value: Unknown) => (path:
|
|
16
|
+
/** @type {(value: Unknown) => (path: list.List<string>) => (src: Unknown|undefined) => Unknown} */
|
|
17
17
|
const setProperty = value => {
|
|
18
|
-
/** @type {(path:
|
|
18
|
+
/** @type {(path: list.List<string>) => (src: Unknown|undefined) => Unknown} */
|
|
19
19
|
const f = path => src => {
|
|
20
|
-
const result =
|
|
20
|
+
const result = list.next(path)
|
|
21
21
|
if (result === undefined) { return value }
|
|
22
22
|
const srcObject = (src === undefined || src === null || typeof src !== 'object' || src instanceof Array) ? {} : src
|
|
23
23
|
const { first, tail } = result
|
|
@@ -26,10 +26,10 @@ const setProperty = value => {
|
|
|
26
26
|
return f
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
/** @type {(_: string) =>
|
|
29
|
+
/** @type {(_: string) => list.List<string>} */
|
|
30
30
|
const stringSerialize = input => [JSON.stringify(input)]
|
|
31
31
|
|
|
32
|
-
/** @type {(_: number) =>
|
|
32
|
+
/** @type {(_: number) => list.List<string>} */
|
|
33
33
|
const numberSerialize = input => [JSON.stringify(input)]
|
|
34
34
|
|
|
35
35
|
const nullSerialize = ['null']
|
|
@@ -38,46 +38,46 @@ const trueSerialize = ['true']
|
|
|
38
38
|
|
|
39
39
|
const falseSerialize = ['false']
|
|
40
40
|
|
|
41
|
-
/** @type {(_: boolean) =>
|
|
41
|
+
/** @type {(_: boolean) => list.List<string>} */
|
|
42
42
|
const boolSerialize = value => value ? trueSerialize : falseSerialize
|
|
43
43
|
|
|
44
44
|
const colon = [':']
|
|
45
45
|
const comma = [',']
|
|
46
46
|
|
|
47
|
-
/** @type {
|
|
48
|
-
const joinOp = b => prior =>
|
|
47
|
+
/** @type {operator.Fold<list.List<string>>} */
|
|
48
|
+
const joinOp = b => prior => list.flat([prior, comma, b])
|
|
49
49
|
|
|
50
|
-
/** @type {(input:
|
|
51
|
-
const join =
|
|
50
|
+
/** @type {(input: list.List<list.List<string>>) => list.List<string>} */
|
|
51
|
+
const join = list.fold(joinOp)([])
|
|
52
52
|
|
|
53
|
-
/** @type {(open: string) => (close: string) => (input:
|
|
54
|
-
const
|
|
53
|
+
/** @type {(open: string) => (close: string) => (input: list.List<list.List<string>>) => list.List<string>} */
|
|
54
|
+
const wrap = open => close => {
|
|
55
55
|
const seqOpen = [open]
|
|
56
56
|
const seqClose = [close]
|
|
57
|
-
return input =>
|
|
57
|
+
return input => list.flat([seqOpen, join(input), seqClose])
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
const
|
|
60
|
+
const objectWrap = wrap('{')('}')
|
|
61
61
|
|
|
62
|
-
const
|
|
62
|
+
const arrayWrap = wrap('[')(']')
|
|
63
63
|
|
|
64
64
|
/** @typedef {object.Entry<Unknown>} Entry*/
|
|
65
65
|
|
|
66
|
-
/** @typedef {(
|
|
66
|
+
/** @typedef {(list.List<Entry>)} Entries */
|
|
67
67
|
|
|
68
68
|
/** @typedef {(entries: Entries) => Entries} MapEntries */
|
|
69
69
|
|
|
70
|
-
/** @type {(mapEntries: MapEntries) => (value: Unknown) =>
|
|
70
|
+
/** @type {(mapEntries: MapEntries) => (value: Unknown) => list.List<string>} */
|
|
71
71
|
const serialize = sort => {
|
|
72
|
-
/** @type {(kv: readonly[string, Unknown]) =>
|
|
73
|
-
const propertySerialize = ([k, v]) =>
|
|
72
|
+
/** @type {(kv: readonly[string, Unknown]) => list.List<string>} */
|
|
73
|
+
const propertySerialize = ([k, v]) => list.flat([
|
|
74
74
|
stringSerialize(k),
|
|
75
75
|
colon,
|
|
76
76
|
f(v)
|
|
77
77
|
])
|
|
78
|
-
/** @type {(object: Object) =>
|
|
79
|
-
const objectSerialize = input =>
|
|
80
|
-
/** @type {(value: Unknown) =>
|
|
78
|
+
/** @type {(object: Object) => list.List<string>} */
|
|
79
|
+
const objectSerialize = input => objectWrap(list.map(propertySerialize)(sort(Object.entries(input))))
|
|
80
|
+
/** @type {(value: Unknown) => list.List<string>} */
|
|
81
81
|
const f = value => {
|
|
82
82
|
switch (typeof value) {
|
|
83
83
|
case 'boolean': { return boolSerialize(value) }
|
|
@@ -90,8 +90,8 @@ const serialize = sort => {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
|
-
/** @type {(input: Array) =>
|
|
94
|
-
const arraySerialize = compose(
|
|
93
|
+
/** @type {(input: Array) => list.List<string>} */
|
|
94
|
+
const arraySerialize = compose(list.map(f))(arrayWrap)
|
|
95
95
|
return f
|
|
96
96
|
}
|
|
97
97
|
|
|
@@ -101,7 +101,7 @@ const serialize = sort => {
|
|
|
101
101
|
*
|
|
102
102
|
* @type {(mapEntries: MapEntries) => (value: Unknown) => string}
|
|
103
103
|
*/
|
|
104
|
-
const stringify = sort => compose(serialize(sort))(
|
|
104
|
+
const stringify = sort => compose(serialize(sort))(list.join(''))
|
|
105
105
|
|
|
106
106
|
/** @type {(value: string) => Unknown} */
|
|
107
107
|
const parse = JSON.parse
|
|
@@ -110,6 +110,8 @@ const parse = JSON.parse
|
|
|
110
110
|
const isObject = value => typeof value === 'object' && value !== null && !(value instanceof Array)
|
|
111
111
|
|
|
112
112
|
module.exports = {
|
|
113
|
+
/** @readonly */
|
|
114
|
+
tokenizer: require('./tokenizer/main.f.js'),
|
|
113
115
|
/** @readonly */
|
|
114
116
|
setProperty,
|
|
115
117
|
/** @readonly */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const json = require('./
|
|
2
|
-
const { sort } = require('../types/object/
|
|
3
|
-
const { identity } = require('../types/function/
|
|
1
|
+
const json = require('./main.f.js')
|
|
2
|
+
const { sort } = require('../types/object/main.f.js')
|
|
3
|
+
const { identity } = require('../types/function/main.f.js')
|
|
4
4
|
|
|
5
5
|
if (json.setProperty("Hello")([])({}) !== "Hello") { throw 'error' }
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const operator = require('../../types/function/operator/
|
|
2
|
-
const list = require('../../types/list/
|
|
3
|
-
const range = require('../../types/range/
|
|
1
|
+
const operator = require('../../types/function/operator/main.f.js')
|
|
2
|
+
const list = require('../../types/list/main.f.js')
|
|
3
|
+
const range = require('../../types/range/main.f.js')
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @typedef {{
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const tokenizer = require('./
|
|
2
|
-
const list = require('../../types/list/
|
|
3
|
-
const json = require('../
|
|
4
|
-
const { sort } = require('../../types/object/
|
|
1
|
+
const tokenizer = require('./main.f.js')
|
|
2
|
+
const list = require('../../types/list/main.f.js')
|
|
3
|
+
const json = require('../main.f.js')
|
|
4
|
+
const { sort } = require('../../types/object/main.f.js')
|
|
5
5
|
|
|
6
6
|
/** @type {(s: string) => readonly tokenizer.JsonToken[]} */
|
|
7
7
|
const tokenizeString = s => list.toArray(tokenizer.tokenize(list.toCharCodes(s)))
|
package/main.f.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
/** @readonly */
|
|
3
|
+
commonjs: require('./commonjs/main.f.js'),
|
|
4
|
+
/** @readonly */
|
|
5
|
+
dev: require('./dev/main.f.js'),
|
|
6
|
+
/** @readonly */
|
|
7
|
+
html: require('./html/main.f.js'),
|
|
8
|
+
/** @readonly */
|
|
9
|
+
json: require('./json/main.f.js'),
|
|
10
|
+
/** @readonly */
|
|
11
|
+
sha2: require('./sha2/main.f.js'),
|
|
12
|
+
/** @readonly */
|
|
13
|
+
types: require('./types/main.f.js'),
|
|
14
|
+
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "functionalscript",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.351",
|
|
4
4
|
"description": "FunctionalScript is a functional subset of JavaScript",
|
|
5
|
-
"main": "
|
|
5
|
+
"main": "main.f.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"tsc": "tsc",
|
|
8
8
|
"test": "tsc && npm run test-only",
|
|
9
|
-
"
|
|
9
|
+
"version": "node ./io/nodejs/version/main.js",
|
|
10
|
+
"test-only": "node --trace-uncaught ./test.f.js"
|
|
10
11
|
},
|
|
11
12
|
"repository": {
|
|
12
13
|
"type": "git",
|
|
@@ -28,7 +29,7 @@
|
|
|
28
29
|
},
|
|
29
30
|
"homepage": "https://github.com/functionalscript/functionalscript#readme",
|
|
30
31
|
"devDependencies": {
|
|
31
|
-
"@types/node": "^
|
|
32
|
-
"typescript": "^4.7.
|
|
32
|
+
"@types/node": "^18.0.0",
|
|
33
|
+
"typescript": "^4.7.4"
|
|
33
34
|
}
|
|
34
35
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const _ = require('./
|
|
2
|
-
const json = require('../json/
|
|
3
|
-
const { sort } = require('../types/object/
|
|
4
|
-
const list = require('../types/list/
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const json = require('../json/main.f.js')
|
|
3
|
+
const { sort } = require('../types/object/main.f.js')
|
|
4
|
+
const list = require('../types/list/main.f.js')
|
|
5
5
|
|
|
6
6
|
/** @type {(a: number) => number} */
|
|
7
7
|
const toU32 = x => (x + 0x1_0000_0000) % 0x1_0000_0000
|
package/{test.js → test.f.js}
RENAMED
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
const i = require('./main.f.js')
|
|
2
2
|
|
|
3
|
-
require('./types/list/test.js')
|
|
4
|
-
require('./types/array/test.js')
|
|
5
|
-
require('./types/btree/test.js')
|
|
6
|
-
require('./sha2/test.js')
|
|
7
|
-
require('./json/test.js')
|
|
8
|
-
require('./json/tokenizer/test.js')
|
|
9
|
-
require('./types/object/test.js')
|
|
3
|
+
require('./types/list/test.f.js')
|
|
4
|
+
require('./types/array/test.f.js')
|
|
5
|
+
require('./types/btree/test.f.js')
|
|
6
|
+
require('./sha2/test.f.js')
|
|
7
|
+
require('./json/test.f.js')
|
|
8
|
+
require('./json/tokenizer/test.f.js')
|
|
9
|
+
require('./types/object/test.f.js')
|
|
10
10
|
require('./io/commonjs/test.js')
|
|
11
|
-
require('./commonjs/package/dependencies/test.js')
|
|
12
|
-
require('./commonjs/package/test.js')
|
|
13
|
-
require('./commonjs/path/test.js')
|
|
14
|
-
require('./types/function/compare/test.js')
|
|
15
|
-
require('./types/
|
|
16
|
-
require('./commonjs/build/test.js')
|
|
17
|
-
require('./types/range/test.js')
|
|
18
|
-
require('./html/test.js')
|
|
11
|
+
require('./commonjs/package/dependencies/test.f.js')
|
|
12
|
+
require('./commonjs/package/test.f.js')
|
|
13
|
+
require('./commonjs/path/test.f.js')
|
|
14
|
+
require('./types/function/compare/test.f.js')
|
|
15
|
+
require('./types/stringset/test.f.js')
|
|
16
|
+
require('./commonjs/build/test.f.js')
|
|
17
|
+
require('./types/range/test.f.js')
|
|
18
|
+
require('./html/test.f.js')
|
|
19
|
+
require('./text/test.f.js')
|
|
19
20
|
|
|
20
21
|
/** @type {() => never} */
|
|
21
22
|
const assert = () => { throw 'assert' }
|
package/text/main.f.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const list = require('../types/list/main.f.js')
|
|
2
|
+
|
|
3
|
+
/** @typedef {readonly Item[]} Text */
|
|
4
|
+
|
|
5
|
+
/** @typedef {string|Text} Item */
|
|
6
|
+
|
|
7
|
+
/** @type {(indent: string) => (text: Text) => list.List<string>} */
|
|
8
|
+
const flat = indent => {
|
|
9
|
+
/** @type {(v: string) => string} */
|
|
10
|
+
const indentFn = v => `${indent}${v}`
|
|
11
|
+
const map = list.map(indentFn)
|
|
12
|
+
/** @type {(item: Item) => list.List<string>} */
|
|
13
|
+
const flatItem = item => typeof(item) === 'string' ? [item] : map(flatText(item))
|
|
14
|
+
const flatText = list.flatMap(flatItem)
|
|
15
|
+
return flatText
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = {
|
|
19
|
+
/** @readonly */
|
|
20
|
+
flat,
|
|
21
|
+
}
|
package/text/test.f.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const list = require('../types/list/main.f.js')
|
|
3
|
+
|
|
4
|
+
{
|
|
5
|
+
/** @type {_.Text} */
|
|
6
|
+
const text = [
|
|
7
|
+
'a',
|
|
8
|
+
'b',
|
|
9
|
+
[
|
|
10
|
+
'c',
|
|
11
|
+
['d'],
|
|
12
|
+
]
|
|
13
|
+
]
|
|
14
|
+
const result = list.join('\n')(_.flat('_')(text))
|
|
15
|
+
if (result !== 'a\nb\n_c\n__d') { throw result }
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = {}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const _ = require('./
|
|
2
|
-
const json = require('../../json/
|
|
3
|
-
const { sort } = require('../object/
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const json = require('../../json/main.f.js')
|
|
3
|
+
const { sort } = require('../object/main.f.js')
|
|
4
4
|
|
|
5
5
|
/** @type {(a: readonly json.Unknown[]) => string} */
|
|
6
6
|
const stringify = a => json.stringify(sort)(a)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const _ = require('../
|
|
2
|
-
const list = require('../../list/
|
|
3
|
-
const cmp = require('../../function/compare/
|
|
4
|
-
const array = require('../../array/
|
|
1
|
+
const _ = require('../types/main.f.js')
|
|
2
|
+
const list = require('../../list/main.f.js')
|
|
3
|
+
const cmp = require('../../function/compare/main.f.js')
|
|
4
|
+
const array = require('../../array/main.f.js')
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @template T
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const _ = require('./
|
|
2
|
-
const list = require('../../list/
|
|
3
|
-
const json = require('../../../json/
|
|
4
|
-
const { sort } = require('../../object/
|
|
5
|
-
const btree = require('../
|
|
6
|
-
const { stringCmp } = require('../../function/compare/
|
|
7
|
-
const s = require('../set/
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const list = require('../../list/main.f.js')
|
|
3
|
+
const json = require('../../../json/main.f.js')
|
|
4
|
+
const { sort } = require('../../object/main.f.js')
|
|
5
|
+
const btree = require('../types/main.f.js')
|
|
6
|
+
const { stringCmp } = require('../../function/compare/main.f.js')
|
|
7
|
+
const s = require('../set/main.f.js')
|
|
8
8
|
|
|
9
9
|
const jsonStr = json.stringify(sort)
|
|
10
10
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const list = require('../list/main.f.js')
|
|
2
|
+
const option = require('../option/main.f.js')
|
|
3
|
+
const _ = require('./types/main.f.js')
|
|
4
|
+
|
|
5
|
+
/** @type {<T>(node: _.Node<T>) => list.Thunk<T>} */
|
|
6
|
+
const nodeValues = node => () => {
|
|
7
|
+
switch (node.length) {
|
|
8
|
+
case 1: case 2: { return node }
|
|
9
|
+
case 3: {
|
|
10
|
+
return list.flat([
|
|
11
|
+
nodeValues(node[0]),
|
|
12
|
+
[node[1]],
|
|
13
|
+
nodeValues(node[2])
|
|
14
|
+
])
|
|
15
|
+
}
|
|
16
|
+
default: {
|
|
17
|
+
return list.flat([
|
|
18
|
+
nodeValues(node[0]),
|
|
19
|
+
[node[1]],
|
|
20
|
+
nodeValues(node[2]),
|
|
21
|
+
[node[3]],
|
|
22
|
+
nodeValues(node[4])
|
|
23
|
+
])
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** @type {<T>(tree: _.Tree<T>) => list.List<T>} */
|
|
29
|
+
const values = option.map(nodeValues)
|
|
30
|
+
|
|
31
|
+
module.exports = {
|
|
32
|
+
/** @readonly */
|
|
33
|
+
find: require('./find/main.f.js'),
|
|
34
|
+
/** @readonly */
|
|
35
|
+
remove: require('./remove/main.f.js'),
|
|
36
|
+
/** @readonly */
|
|
37
|
+
set: require('./set/main.f.js'),
|
|
38
|
+
/** @readonly */
|
|
39
|
+
values,
|
|
40
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const _ = require('../
|
|
2
|
-
const cmp = require('../../function/compare/
|
|
3
|
-
const find = require('../find/
|
|
4
|
-
const list = require('../../list/
|
|
5
|
-
const array = require('../../array/
|
|
6
|
-
const option = require('../../option/
|
|
1
|
+
const _ = require('../types/main.f.js')
|
|
2
|
+
const cmp = require('../../function/compare/main.f.js')
|
|
3
|
+
const find = require('../find/main.f.js')
|
|
4
|
+
const list = require('../../list/main.f.js')
|
|
5
|
+
const array = require('../../array/main.f.js')
|
|
6
|
+
const option = require('../../option/main.f.js')
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* @template T
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const _ = require('./
|
|
2
|
-
const btree = require('../
|
|
3
|
-
const s = require('../set/
|
|
4
|
-
const { stringCmp } = require('../../function/compare/
|
|
5
|
-
const json = require('../../../json/
|
|
6
|
-
const { sort } = require('../../object/
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const btree = require('../types/main.f.js')
|
|
3
|
+
const s = require('../set/main.f.js')
|
|
4
|
+
const { stringCmp } = require('../../function/compare/main.f.js')
|
|
5
|
+
const json = require('../../../json/main.f.js')
|
|
6
|
+
const { sort } = require('../../object/main.f.js')
|
|
7
7
|
|
|
8
8
|
/** @type {(node: btree.Node<string>) => (value: string) => btree.Node<string>} */
|
|
9
9
|
const set = node => value => s.set(stringCmp(value))(value)(node)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const _ = require('../
|
|
2
|
-
const find = require('../find/
|
|
3
|
-
const cmp = require('../../function/compare/
|
|
4
|
-
const list = require('../../list/
|
|
1
|
+
const _ = require('../types/main.f.js')
|
|
2
|
+
const find = require('../find/main.f.js')
|
|
3
|
+
const cmp = require('../../function/compare/main.f.js')
|
|
4
|
+
const list = require('../../list/main.f.js')
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @template T
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const _ = require('./
|
|
2
|
-
const btree = require('../
|
|
3
|
-
const { stringCmp } = require('../../function/compare/
|
|
4
|
-
const json = require('../../../json/
|
|
5
|
-
const { sort } = require('../../object/
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const btree = require('../types/main.f.js')
|
|
3
|
+
const { stringCmp } = require('../../function/compare/main.f.js')
|
|
4
|
+
const json = require('../../../json/main.f.js')
|
|
5
|
+
const { sort } = require('../../object/main.f.js')
|
|
6
6
|
|
|
7
7
|
/** @type {(node: btree.Node<string>) => (value: string) => btree.Node<string>} */
|
|
8
8
|
const set = node => value => _.set(stringCmp(value))(value)(node)
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
const btree = require('./
|
|
2
|
-
const { values } =
|
|
3
|
-
const json = require('../../json/
|
|
4
|
-
const { sort } = require('../object/
|
|
5
|
-
const { stringCmp } = require('../function/compare/
|
|
6
|
-
const list = require('../list/
|
|
7
|
-
const s = require('./set/
|
|
8
|
-
const f = require('./find/
|
|
1
|
+
const btree = require('./types/main.f.js')
|
|
2
|
+
const { values } = require('./main.f.js')
|
|
3
|
+
const json = require('../../json/main.f.js')
|
|
4
|
+
const { sort } = require('../object/main.f.js')
|
|
5
|
+
const { stringCmp } = require('../function/compare/main.f.js')
|
|
6
|
+
const list = require('../list/main.f.js')
|
|
7
|
+
const s = require('./set/main.f.js')
|
|
8
|
+
const f = require('./find/main.f.js')
|
|
9
9
|
|
|
10
|
-
require('./find/test.js')
|
|
11
|
-
require('./set/test.js')
|
|
12
|
-
require('./remove/test.js')
|
|
10
|
+
require('./find/test.f.js')
|
|
11
|
+
require('./set/test.f.js')
|
|
12
|
+
require('./remove/test.f.js')
|
|
13
13
|
|
|
14
14
|
const jsonStr = json.stringify(sort)
|
|
15
15
|
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
const seq = require('../list/index.js')
|
|
2
|
-
const option = require('../option/index.js')
|
|
3
|
-
|
|
4
1
|
/**
|
|
5
2
|
* @template T
|
|
6
3
|
* @typedef {readonly[T]} Array1
|
|
@@ -54,29 +51,6 @@ const option = require('../option/index.js')
|
|
|
54
51
|
* @typedef {Node<T> | undefined} Tree
|
|
55
52
|
*/
|
|
56
53
|
|
|
57
|
-
/** @type {<T>(node: Node<T>) => seq.Thunk<T>} */
|
|
58
|
-
const nodeValues = node => () => {
|
|
59
|
-
switch (node.length) {
|
|
60
|
-
case 1: case 2: { return node }
|
|
61
|
-
case 3: {
|
|
62
|
-
return seq.flat([
|
|
63
|
-
nodeValues(node[0]),
|
|
64
|
-
[node[1]],
|
|
65
|
-
nodeValues(node[2])
|
|
66
|
-
])
|
|
67
|
-
}
|
|
68
|
-
default: {
|
|
69
|
-
return seq.flat([
|
|
70
|
-
nodeValues(node[0]),
|
|
71
|
-
[node[1]],
|
|
72
|
-
nodeValues(node[2]),
|
|
73
|
-
[node[3]],
|
|
74
|
-
nodeValues(node[4])
|
|
75
|
-
])
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
54
|
/**
|
|
81
55
|
* @template T
|
|
82
56
|
* @typedef {readonly[Node<T>]} Branch1
|
|
@@ -87,10 +61,4 @@ const nodeValues = node => () => {
|
|
|
87
61
|
* @typedef { readonly[...Branch5<T>, T, Node<T>] } Branch7
|
|
88
62
|
*/
|
|
89
63
|
|
|
90
|
-
|
|
91
|
-
const values = option.map(nodeValues)
|
|
92
|
-
|
|
93
|
-
module.exports = {
|
|
94
|
-
/** @readonly */
|
|
95
|
-
values,
|
|
96
|
-
}
|
|
64
|
+
module.exports = {}
|
|
@@ -18,6 +18,10 @@ const identity = value => value
|
|
|
18
18
|
const flip = f => b => a => f(a)(b)
|
|
19
19
|
|
|
20
20
|
module.exports = {
|
|
21
|
+
/** @readonly */
|
|
22
|
+
compare: require('./compare/main.f.js'),
|
|
23
|
+
/** @readonly */
|
|
24
|
+
operator: require('./operator/main.f.js'),
|
|
21
25
|
/** @readonly */
|
|
22
26
|
identity,
|
|
23
27
|
/** @readonly */
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const { compose, identity } = require('../function/
|
|
2
|
-
const operator = require('../function/operator/
|
|
3
|
-
const { logicalNot, strictEqual, stateScanToScan, reduceToScan, foldToScan } =
|
|
1
|
+
const { compose, identity } = require('../function/main.f.js')
|
|
2
|
+
const operator = require('../function/operator/main.f.js')
|
|
3
|
+
const { logicalNot, strictEqual, stateScanToScan, reduceToScan, foldToScan } = operator
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @template T
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const _ = require('./
|
|
2
|
-
const json = require('../../json/
|
|
3
|
-
const { sort } = require('../object/
|
|
4
|
-
const { addition, strictEqual, foldToScan } = require('../function/operator/
|
|
1
|
+
const _ = require('./main.f.js')
|
|
2
|
+
const json = require('../../json/main.f.js')
|
|
3
|
+
const { sort } = require('../object/main.f.js')
|
|
4
|
+
const { addition, strictEqual, foldToScan } = require('../function/operator/main.f.js')
|
|
5
5
|
|
|
6
6
|
/** @type {(sequence: _.List<json.Unknown>) => string} */
|
|
7
7
|
const stringify = sequence => json.stringify(sort)(_.toArray(sequence))
|
package/types/main.f.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
/** @readonly */
|
|
3
|
+
array: require('./array/main.f.js'),
|
|
4
|
+
/** @readonly */
|
|
5
|
+
btree: require('./btree/main.f.js'),
|
|
6
|
+
/** @readonly */
|
|
7
|
+
function: require('./function/main.f.js'),
|
|
8
|
+
/** @readonly */
|
|
9
|
+
list: require('./list/main.f.js'),
|
|
10
|
+
/** @readonly */
|
|
11
|
+
map: require('./map/main.f.js'),
|
|
12
|
+
/** @readonly */
|
|
13
|
+
object: require('./object/main.f.js'),
|
|
14
|
+
/** @readonly */
|
|
15
|
+
range: require('./range/main.f.js'),
|
|
16
|
+
/** @readonly */
|
|
17
|
+
result: require('./result/main.f.js'),
|
|
18
|
+
/** @readonly */
|
|
19
|
+
stringSet: require('./stringset/main.f.js'),
|
|
20
|
+
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
1
|
+
const btTypes = require('../btree/types/main.f.js')
|
|
2
|
+
const btree = require('../btree/main.f.js')
|
|
3
|
+
const { values } = require("../btree/main.f.js")
|
|
4
|
+
const find = require('../btree/find/main.f.js')
|
|
5
|
+
const s = require('../btree/set/main.f.js')
|
|
6
|
+
const compare = require('../function/compare/main.f.js')
|
|
7
|
+
const { stringCmp } = require('../function/compare/main.f.js')
|
|
8
|
+
const list = require('../list/main.f.js')
|
|
9
|
+
const btRemove = require('../btree/remove/main.f.js')
|
|
9
10
|
|
|
10
11
|
/** @typedef {compare.Sign} Sign */
|
|
11
12
|
|
|
@@ -21,7 +22,7 @@ const btRemove = require('../btree/remove/index.js')
|
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
24
|
* @template T
|
|
24
|
-
* @typedef {
|
|
25
|
+
* @typedef {btTypes.Tree<Entry<T>>} Map
|
|
25
26
|
*/
|
|
26
27
|
|
|
27
28
|
/** @type {(a: string) => <T>(b: Entry<T>) => Sign} */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const { at, set, empty, entries, remove } = require('./
|
|
2
|
-
const seq = require('../list/
|
|
1
|
+
const { at, set, empty, entries, remove } = require('./main.f.js')
|
|
2
|
+
const seq = require('../list/main.f.js')
|
|
3
3
|
|
|
4
4
|
{
|
|
5
5
|
let m = set('a')(1)(undefined)
|
|
@@ -53,7 +53,7 @@ const seq = require('../list/index.js')
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
{
|
|
56
|
-
/** @type {import('.').Map<number>} */
|
|
56
|
+
/** @type {import('./main.f').Map<number>} */
|
|
57
57
|
let m = empty
|
|
58
58
|
for (let i = 0; i < 100_000; ++i) {
|
|
59
59
|
m = set((i * i).toString())(i)(m)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const { compose } = require('../function/index.js')
|
|
1
|
+
const btTypes = require('../btree/types/main.f.js')
|
|
2
|
+
const btree = require('../btree/main.f.js')
|
|
3
|
+
const { find } = btree
|
|
4
|
+
const { stringCmp } = require("../function/compare/main.f.js")
|
|
5
|
+
const list = require('../list/main.f.js')
|
|
6
|
+
const { compose } = require('../function/main.f.js')
|
|
8
7
|
|
|
9
|
-
/** @typedef {
|
|
8
|
+
/** @typedef {btTypes.Tree<string>} StringSet */
|
|
10
9
|
|
|
11
10
|
/** @type {(value: string) => (set: StringSet) => boolean} */
|
|
12
11
|
const contains = value => s => s !== undefined && find.isFound(find.find(stringCmp(value))(s).first)
|
|
13
12
|
|
|
14
13
|
/** @type {(value: string) => (s: StringSet) => StringSet} */
|
|
15
|
-
const set = value =>
|
|
14
|
+
const set = value => btree.set.set(stringCmp(value))(value)
|
|
16
15
|
|
|
17
16
|
/** @type {(s: StringSet) => list.List<string>} */
|
|
18
17
|
const values = btree.values
|
|
@@ -20,7 +19,7 @@ const values = btree.values
|
|
|
20
19
|
const fromValues = list.reduce(set)(undefined)
|
|
21
20
|
|
|
22
21
|
/** @type {(value: string) => (s: StringSet) => StringSet} */
|
|
23
|
-
const remove = compose(stringCmp)(
|
|
22
|
+
const remove = compose(stringCmp)(btree.remove.remove)
|
|
24
23
|
|
|
25
24
|
module.exports = {
|
|
26
25
|
/** @readonly */
|
package/commonjs/index.js
DELETED