@lsby/ts-fp-data 0.0.9-beta.2 → 0.0.9
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/dist/cjs/data/maybe.cjs +18 -6
- package/dist/cjs/data/maybe.d.cts +8 -2
- package/dist/cjs/data/task.cjs +35 -5
- package/dist/cjs/data/task.d.cts +30 -14
- package/dist/cjs/func/seq.cjs +35 -5
- package/dist/cjs/index.cjs +53 -11
- package/dist/cjs/index.d.cts +1 -1
- package/dist/esm/{chunk-PP7TCBHD.js → chunk-CQG32QQC.js} +18 -6
- package/dist/esm/{chunk-YEO4J4FS.js → chunk-IHXXIFRN.js} +1 -1
- package/dist/esm/{chunk-ZUDRGXSS.js → chunk-OYLE35IQ.js} +35 -5
- package/dist/esm/data/maybe.d.ts +8 -2
- package/dist/esm/data/maybe.js +1 -1
- package/dist/esm/data/task.d.ts +30 -14
- package/dist/esm/data/task.js +1 -1
- package/dist/esm/func/seq.js +2 -2
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +3 -3
- package/package.json +7 -4
package/dist/cjs/data/maybe.cjs
CHANGED
|
@@ -35,9 +35,6 @@ var Just = class _Just extends Maybe {
|
|
|
35
35
|
super();
|
|
36
36
|
this.\u503C = \u503C;
|
|
37
37
|
}
|
|
38
|
-
match(onJust, _onNothing) {
|
|
39
|
-
return onJust(this.\u503C);
|
|
40
|
-
}
|
|
41
38
|
map(f) {
|
|
42
39
|
return new _Just(f(this.\u503C));
|
|
43
40
|
}
|
|
@@ -50,17 +47,23 @@ var Just = class _Just extends Maybe {
|
|
|
50
47
|
isNothing() {
|
|
51
48
|
return false;
|
|
52
49
|
}
|
|
50
|
+
assertJust() {
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
assertNothing() {
|
|
54
|
+
throw new Error("\u65AD\u8A00\u5931\u8D25");
|
|
55
|
+
}
|
|
53
56
|
getJust() {
|
|
54
57
|
return this.\u503C;
|
|
55
58
|
}
|
|
56
59
|
getJustOrNull() {
|
|
57
60
|
return this.\u503C;
|
|
58
61
|
}
|
|
62
|
+
match(onJust, _onNothing) {
|
|
63
|
+
return onJust(this.\u503C);
|
|
64
|
+
}
|
|
59
65
|
};
|
|
60
66
|
var Nothing = class _Nothing extends Maybe {
|
|
61
|
-
match(_onJust, onNothing) {
|
|
62
|
-
return onNothing();
|
|
63
|
-
}
|
|
64
67
|
map(_f) {
|
|
65
68
|
return new _Nothing();
|
|
66
69
|
}
|
|
@@ -73,9 +76,18 @@ var Nothing = class _Nothing extends Maybe {
|
|
|
73
76
|
isNothing() {
|
|
74
77
|
return true;
|
|
75
78
|
}
|
|
79
|
+
assertJust() {
|
|
80
|
+
throw new Error("\u65AD\u8A00\u5931\u8D25");
|
|
81
|
+
}
|
|
82
|
+
assertNothing() {
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
76
85
|
getJustOrNull() {
|
|
77
86
|
return null;
|
|
78
87
|
}
|
|
88
|
+
match(_onJust, onNothing) {
|
|
89
|
+
return onNothing();
|
|
90
|
+
}
|
|
79
91
|
};
|
|
80
92
|
// Annotate the CommonJS export names for ESM import in node:
|
|
81
93
|
0 && (module.exports = {
|
|
@@ -4,27 +4,33 @@ declare abstract class Maybe<A> {
|
|
|
4
4
|
abstract bind<B>(f: (a: A) => Maybe<B>): Maybe<B>;
|
|
5
5
|
abstract isJust(): this is Just<A>;
|
|
6
6
|
abstract isNothing(): this is Nothing<A>;
|
|
7
|
+
abstract assertJust(): Just<A>;
|
|
8
|
+
abstract assertNothing(): Nothing<A>;
|
|
7
9
|
abstract getJustOrNull(): A | null;
|
|
8
10
|
abstract match<B>(onJust: (a: A) => B, onNothing: () => B): B;
|
|
9
11
|
}
|
|
10
12
|
declare class Just<A> extends Maybe<A> {
|
|
11
13
|
private 值;
|
|
12
14
|
constructor(值: A);
|
|
13
|
-
match<B>(onJust: (a: A) => B, _onNothing: () => B): B;
|
|
14
15
|
map<B>(f: (a: A) => B): Maybe<B>;
|
|
15
16
|
bind<B>(f: (a: A) => Maybe<B>): Maybe<B>;
|
|
16
17
|
isJust(): this is Just<A>;
|
|
17
18
|
isNothing(): this is Nothing<A>;
|
|
19
|
+
assertJust(): Just<A>;
|
|
20
|
+
assertNothing(): Nothing<A>;
|
|
18
21
|
getJust(): A;
|
|
19
22
|
getJustOrNull(): A | null;
|
|
23
|
+
match<B>(onJust: (a: A) => B, _onNothing: () => B): B;
|
|
20
24
|
}
|
|
21
25
|
declare class Nothing<A> extends Maybe<A> {
|
|
22
|
-
match<B>(_onJust: (a: A) => B, onNothing: () => B): B;
|
|
23
26
|
map<B>(_f: (a: A) => B): Maybe<B>;
|
|
24
27
|
bind<B>(_f: (a: A) => Maybe<B>): Maybe<B>;
|
|
25
28
|
isJust(): this is Just<A>;
|
|
26
29
|
isNothing(): this is Nothing<A>;
|
|
30
|
+
assertJust(): Just<A>;
|
|
31
|
+
assertNothing(): Nothing<A>;
|
|
27
32
|
getJustOrNull(): A | null;
|
|
33
|
+
match<B>(_onJust: (a: A) => B, onNothing: () => B): B;
|
|
28
34
|
}
|
|
29
35
|
|
|
30
36
|
export { Just, Maybe, Nothing };
|
package/dist/cjs/data/task.cjs
CHANGED
|
@@ -112,25 +112,52 @@ var TaskDo = class _TaskDo {
|
|
|
112
112
|
let(name, task) {
|
|
113
113
|
return new _TaskDo(
|
|
114
114
|
this.accTask.bind(
|
|
115
|
-
(a) => Task.pure(task(a.env)).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue:
|
|
115
|
+
(a) => Task.pure(task(a.env)).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue: a.lastValue }))
|
|
116
116
|
)
|
|
117
117
|
);
|
|
118
118
|
}
|
|
119
119
|
bind(name, task) {
|
|
120
120
|
return new _TaskDo(
|
|
121
|
-
this.accTask.bind(
|
|
121
|
+
this.accTask.bind(
|
|
122
|
+
(a) => task(a.env).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue: a.lastValue }))
|
|
123
|
+
)
|
|
122
124
|
);
|
|
123
125
|
}
|
|
124
126
|
exec(task) {
|
|
125
|
-
return new _TaskDo(
|
|
127
|
+
return new _TaskDo(
|
|
128
|
+
this.accTask.bind((a) => task(a.env).bind(() => Task.pure({ env: a.env, lastValue: a.lastValue })))
|
|
129
|
+
);
|
|
126
130
|
}
|
|
127
131
|
effect(task) {
|
|
132
|
+
return new _TaskDo(
|
|
133
|
+
this.accTask.bind((a) => Task.pure(task(a.env)).bind(() => Task.pure({ env: a.env, lastValue: a.lastValue })))
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
pure(task) {
|
|
128
137
|
return new _TaskDo(
|
|
129
138
|
this.accTask.bind((a) => Task.pure(task(a.env)).bind((v) => Task.pure({ env: a.env, lastValue: v })))
|
|
130
139
|
);
|
|
131
140
|
}
|
|
132
|
-
|
|
133
|
-
return new _TaskDo(
|
|
141
|
+
if(cond, task) {
|
|
142
|
+
return new _TaskDo(
|
|
143
|
+
this.accTask.bind(
|
|
144
|
+
(a) => Task.pure(cond(a.env)).bind(
|
|
145
|
+
(c) => c ? Task.pure(task(a.env)).bind((x) => Task.pure({ env: a.env, lastValue: x, lock: true })) : Task.pure({
|
|
146
|
+
env: a.env,
|
|
147
|
+
/*从类型可以确保if没命中的情况pureIf来补充正确的候选值, 所以这里跳过ts检查*/
|
|
148
|
+
lastValue: a.lastValue,
|
|
149
|
+
lock: false
|
|
150
|
+
})
|
|
151
|
+
)
|
|
152
|
+
)
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
pureR(task) {
|
|
156
|
+
return new _TaskDo(
|
|
157
|
+
this.accTask.bind(
|
|
158
|
+
(a) => a.lock ? Task.pure(a) : Task.pure(task(a.env)).bind((v) => Task.pure({ env: a.env, lastValue: v }))
|
|
159
|
+
)
|
|
160
|
+
);
|
|
134
161
|
}
|
|
135
162
|
getTask() {
|
|
136
163
|
return new Task(async () => {
|
|
@@ -157,6 +184,9 @@ var Task = class _Task {
|
|
|
157
184
|
run() {
|
|
158
185
|
return this.f();
|
|
159
186
|
}
|
|
187
|
+
do() {
|
|
188
|
+
return new TaskDo(this.bind((a) => _Task.pure({ env: {}, lastValue: a })));
|
|
189
|
+
}
|
|
160
190
|
async tryRun() {
|
|
161
191
|
try {
|
|
162
192
|
return new Right(await this.run());
|
package/dist/cjs/data/task.d.cts
CHANGED
|
@@ -1,35 +1,51 @@
|
|
|
1
1
|
import { Either } from './either.cjs';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
let<K extends string, X>(name: K, task: (env: Env) => X):
|
|
5
|
-
bind<K extends string, X>(name: K, task: (env: Env) => Task<X>):
|
|
6
|
-
exec<X>(task: (env: Env) => Task<X>):
|
|
7
|
-
effect<X>(task: (env: Env) => X):
|
|
8
|
-
|
|
3
|
+
type TaskDoTypeBase<Env extends Record<string, any>, A> = {
|
|
4
|
+
let<K extends string, X>(name: K, task: (env: Env) => X): TaskDoTypeNoGet<Env & Record<K, X>, A>;
|
|
5
|
+
bind<K extends string, X>(name: K, task: (env: Env) => Task<X>): TaskDoTypeNoGet<Env & Record<K, X>, A>;
|
|
6
|
+
exec<X>(task: (env: Env) => Task<X>): TaskDoTypeNoGet<Env, A>;
|
|
7
|
+
effect<X>(task: (env: Env) => X): TaskDoTypeNoGet<Env, A>;
|
|
8
|
+
};
|
|
9
|
+
type TaskDoTypeReturn<Env extends Record<string, any>, _A> = {
|
|
10
|
+
pure<X>(task: (env: Env) => X): TaskDoTypeGet<Env, X>;
|
|
11
|
+
};
|
|
12
|
+
type TaskDoTypeIf<Env extends Record<string, any>, _A> = {
|
|
13
|
+
if<X>(cond: (env: Env) => boolean, task: (env: Env) => X): TaskDoTypeIfReturn<Env, X>;
|
|
14
|
+
};
|
|
15
|
+
type TaskDoTypeIfReturn<Env extends Record<string, any>, A> = {
|
|
16
|
+
pureR(task: (env: Env) => A): TaskDoTypeGet<Env, A>;
|
|
17
|
+
};
|
|
18
|
+
type TaskDoTypeGet<_Env extends Record<string, any>, A> = {
|
|
9
19
|
getTask(): Task<A>;
|
|
10
|
-
}
|
|
20
|
+
};
|
|
21
|
+
type TaskDoTypeNoGet<Env extends Record<string, any>, A> = TaskDoTypeBase<Env, A> & TaskDoTypeReturn<Env, A> & TaskDoTypeIf<Env, A>;
|
|
22
|
+
type TaskDoType<Env extends Record<string, any>, A> = TaskDoTypeBase<Env, A> & TaskDoTypeReturn<Env, A> & TaskDoTypeGet<Env, A> & TaskDoTypeIf<Env, A> & TaskDoTypeIfReturn<Env, A>;
|
|
11
23
|
declare class TaskDo<Env extends Record<string, any>, A> implements TaskDoType<Env, A> {
|
|
12
24
|
private accTask;
|
|
13
25
|
constructor(accTask: Task<{
|
|
14
26
|
env: Env;
|
|
15
27
|
lastValue: A;
|
|
28
|
+
lock?: boolean;
|
|
16
29
|
}>);
|
|
17
|
-
let<K extends string, X>(name: K, task: (env: Env) => X):
|
|
18
|
-
bind<K extends string, X>(name: K, task: (env: Env) => Task<X>):
|
|
19
|
-
exec<X>(task: (env: Env) => Task<X>):
|
|
20
|
-
effect<X>(task: (env: Env) => X):
|
|
21
|
-
pure<X>(
|
|
30
|
+
let<K extends string, X>(name: K, task: (env: Env) => X): TaskDoTypeNoGet<Env & Record<K, X>, A>;
|
|
31
|
+
bind<K extends string, X>(name: K, task: (env: Env) => Task<X>): TaskDoTypeNoGet<Env & Record<K, X>, A>;
|
|
32
|
+
exec<X>(task: (env: Env) => Task<X>): TaskDoTypeNoGet<Env, A>;
|
|
33
|
+
effect<X>(task: (env: Env) => X): TaskDoTypeNoGet<Env, A>;
|
|
34
|
+
pure<X>(task: (env: Env) => X): TaskDoTypeGet<Env, X>;
|
|
35
|
+
if<X>(cond: (env: Env) => boolean, task: (env: Env) => X): TaskDoTypeIfReturn<Env, X>;
|
|
36
|
+
pureR(task: (env: Env) => A): TaskDoTypeGet<Env, A>;
|
|
22
37
|
getTask(): Task<A>;
|
|
23
38
|
}
|
|
24
39
|
declare class Task<A> {
|
|
25
40
|
private f;
|
|
26
41
|
static pure<A>(a: A): Task<A>;
|
|
27
|
-
static do():
|
|
42
|
+
static do(): TaskDoTypeBase<Record<string, any>, void>;
|
|
28
43
|
constructor(f: () => Promise<A>);
|
|
29
44
|
map<B>(f: (a: A) => B): Task<B>;
|
|
30
45
|
bind<B>(f: (a: A) => Task<B>): Task<B>;
|
|
31
46
|
run(): Promise<A>;
|
|
47
|
+
do(): TaskDoTypeBase<{}, A>;
|
|
32
48
|
tryRun(): Promise<Either<Error, A>>;
|
|
33
49
|
}
|
|
34
50
|
|
|
35
|
-
export { Task, TaskDo, type TaskDoType };
|
|
51
|
+
export { Task, TaskDo, type TaskDoType, type TaskDoTypeBase, type TaskDoTypeGet, type TaskDoTypeIf, type TaskDoTypeIfReturn, type TaskDoTypeNoGet, type TaskDoTypeReturn };
|
package/dist/cjs/func/seq.cjs
CHANGED
|
@@ -114,25 +114,52 @@ var TaskDo = class _TaskDo {
|
|
|
114
114
|
let(name, task) {
|
|
115
115
|
return new _TaskDo(
|
|
116
116
|
this.accTask.bind(
|
|
117
|
-
(a) => Task.pure(task(a.env)).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue:
|
|
117
|
+
(a) => Task.pure(task(a.env)).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue: a.lastValue }))
|
|
118
118
|
)
|
|
119
119
|
);
|
|
120
120
|
}
|
|
121
121
|
bind(name, task) {
|
|
122
122
|
return new _TaskDo(
|
|
123
|
-
this.accTask.bind(
|
|
123
|
+
this.accTask.bind(
|
|
124
|
+
(a) => task(a.env).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue: a.lastValue }))
|
|
125
|
+
)
|
|
124
126
|
);
|
|
125
127
|
}
|
|
126
128
|
exec(task) {
|
|
127
|
-
return new _TaskDo(
|
|
129
|
+
return new _TaskDo(
|
|
130
|
+
this.accTask.bind((a) => task(a.env).bind(() => Task.pure({ env: a.env, lastValue: a.lastValue })))
|
|
131
|
+
);
|
|
128
132
|
}
|
|
129
133
|
effect(task) {
|
|
134
|
+
return new _TaskDo(
|
|
135
|
+
this.accTask.bind((a) => Task.pure(task(a.env)).bind(() => Task.pure({ env: a.env, lastValue: a.lastValue })))
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
pure(task) {
|
|
130
139
|
return new _TaskDo(
|
|
131
140
|
this.accTask.bind((a) => Task.pure(task(a.env)).bind((v) => Task.pure({ env: a.env, lastValue: v })))
|
|
132
141
|
);
|
|
133
142
|
}
|
|
134
|
-
|
|
135
|
-
return new _TaskDo(
|
|
143
|
+
if(cond, task) {
|
|
144
|
+
return new _TaskDo(
|
|
145
|
+
this.accTask.bind(
|
|
146
|
+
(a) => Task.pure(cond(a.env)).bind(
|
|
147
|
+
(c) => c ? Task.pure(task(a.env)).bind((x) => Task.pure({ env: a.env, lastValue: x, lock: true })) : Task.pure({
|
|
148
|
+
env: a.env,
|
|
149
|
+
/*从类型可以确保if没命中的情况pureIf来补充正确的候选值, 所以这里跳过ts检查*/
|
|
150
|
+
lastValue: a.lastValue,
|
|
151
|
+
lock: false
|
|
152
|
+
})
|
|
153
|
+
)
|
|
154
|
+
)
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
pureR(task) {
|
|
158
|
+
return new _TaskDo(
|
|
159
|
+
this.accTask.bind(
|
|
160
|
+
(a) => a.lock ? Task.pure(a) : Task.pure(task(a.env)).bind((v) => Task.pure({ env: a.env, lastValue: v }))
|
|
161
|
+
)
|
|
162
|
+
);
|
|
136
163
|
}
|
|
137
164
|
getTask() {
|
|
138
165
|
return new Task(async () => {
|
|
@@ -159,6 +186,9 @@ var Task = class _Task {
|
|
|
159
186
|
run() {
|
|
160
187
|
return this.f();
|
|
161
188
|
}
|
|
189
|
+
do() {
|
|
190
|
+
return new TaskDo(this.bind((a) => _Task.pure({ env: {}, lastValue: a })));
|
|
191
|
+
}
|
|
162
192
|
async tryRun() {
|
|
163
193
|
try {
|
|
164
194
|
return new Right(await this.run());
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -122,25 +122,52 @@ var TaskDo = class _TaskDo {
|
|
|
122
122
|
let(name, task) {
|
|
123
123
|
return new _TaskDo(
|
|
124
124
|
this.accTask.bind(
|
|
125
|
-
(a) => Task.pure(task(a.env)).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue:
|
|
125
|
+
(a) => Task.pure(task(a.env)).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue: a.lastValue }))
|
|
126
126
|
)
|
|
127
127
|
);
|
|
128
128
|
}
|
|
129
129
|
bind(name, task) {
|
|
130
130
|
return new _TaskDo(
|
|
131
|
-
this.accTask.bind(
|
|
131
|
+
this.accTask.bind(
|
|
132
|
+
(a) => task(a.env).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue: a.lastValue }))
|
|
133
|
+
)
|
|
132
134
|
);
|
|
133
135
|
}
|
|
134
136
|
exec(task) {
|
|
135
|
-
return new _TaskDo(
|
|
137
|
+
return new _TaskDo(
|
|
138
|
+
this.accTask.bind((a) => task(a.env).bind(() => Task.pure({ env: a.env, lastValue: a.lastValue })))
|
|
139
|
+
);
|
|
136
140
|
}
|
|
137
141
|
effect(task) {
|
|
142
|
+
return new _TaskDo(
|
|
143
|
+
this.accTask.bind((a) => Task.pure(task(a.env)).bind(() => Task.pure({ env: a.env, lastValue: a.lastValue })))
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
pure(task) {
|
|
138
147
|
return new _TaskDo(
|
|
139
148
|
this.accTask.bind((a) => Task.pure(task(a.env)).bind((v) => Task.pure({ env: a.env, lastValue: v })))
|
|
140
149
|
);
|
|
141
150
|
}
|
|
142
|
-
|
|
143
|
-
return new _TaskDo(
|
|
151
|
+
if(cond, task) {
|
|
152
|
+
return new _TaskDo(
|
|
153
|
+
this.accTask.bind(
|
|
154
|
+
(a) => Task.pure(cond(a.env)).bind(
|
|
155
|
+
(c) => c ? Task.pure(task(a.env)).bind((x) => Task.pure({ env: a.env, lastValue: x, lock: true })) : Task.pure({
|
|
156
|
+
env: a.env,
|
|
157
|
+
/*从类型可以确保if没命中的情况pureIf来补充正确的候选值, 所以这里跳过ts检查*/
|
|
158
|
+
lastValue: a.lastValue,
|
|
159
|
+
lock: false
|
|
160
|
+
})
|
|
161
|
+
)
|
|
162
|
+
)
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
pureR(task) {
|
|
166
|
+
return new _TaskDo(
|
|
167
|
+
this.accTask.bind(
|
|
168
|
+
(a) => a.lock ? Task.pure(a) : Task.pure(task(a.env)).bind((v) => Task.pure({ env: a.env, lastValue: v }))
|
|
169
|
+
)
|
|
170
|
+
);
|
|
144
171
|
}
|
|
145
172
|
getTask() {
|
|
146
173
|
return new Task(async () => {
|
|
@@ -167,6 +194,9 @@ var Task = class _Task {
|
|
|
167
194
|
run() {
|
|
168
195
|
return this.f();
|
|
169
196
|
}
|
|
197
|
+
do() {
|
|
198
|
+
return new TaskDo(this.bind((a) => _Task.pure({ env: {}, lastValue: a })));
|
|
199
|
+
}
|
|
170
200
|
async tryRun() {
|
|
171
201
|
try {
|
|
172
202
|
return new Right(await this.run());
|
|
@@ -189,9 +219,6 @@ var Just = class _Just extends Maybe {
|
|
|
189
219
|
super();
|
|
190
220
|
this.\u503C = \u503C;
|
|
191
221
|
}
|
|
192
|
-
match(onJust, _onNothing) {
|
|
193
|
-
return onJust(this.\u503C);
|
|
194
|
-
}
|
|
195
222
|
map(f) {
|
|
196
223
|
return new _Just(f(this.\u503C));
|
|
197
224
|
}
|
|
@@ -204,17 +231,23 @@ var Just = class _Just extends Maybe {
|
|
|
204
231
|
isNothing() {
|
|
205
232
|
return false;
|
|
206
233
|
}
|
|
234
|
+
assertJust() {
|
|
235
|
+
return this;
|
|
236
|
+
}
|
|
237
|
+
assertNothing() {
|
|
238
|
+
throw new Error("\u65AD\u8A00\u5931\u8D25");
|
|
239
|
+
}
|
|
207
240
|
getJust() {
|
|
208
241
|
return this.\u503C;
|
|
209
242
|
}
|
|
210
243
|
getJustOrNull() {
|
|
211
244
|
return this.\u503C;
|
|
212
245
|
}
|
|
246
|
+
match(onJust, _onNothing) {
|
|
247
|
+
return onJust(this.\u503C);
|
|
248
|
+
}
|
|
213
249
|
};
|
|
214
250
|
var Nothing = class _Nothing extends Maybe {
|
|
215
|
-
match(_onJust, onNothing) {
|
|
216
|
-
return onNothing();
|
|
217
|
-
}
|
|
218
251
|
map(_f) {
|
|
219
252
|
return new _Nothing();
|
|
220
253
|
}
|
|
@@ -227,9 +260,18 @@ var Nothing = class _Nothing extends Maybe {
|
|
|
227
260
|
isNothing() {
|
|
228
261
|
return true;
|
|
229
262
|
}
|
|
263
|
+
assertJust() {
|
|
264
|
+
throw new Error("\u65AD\u8A00\u5931\u8D25");
|
|
265
|
+
}
|
|
266
|
+
assertNothing() {
|
|
267
|
+
return this;
|
|
268
|
+
}
|
|
230
269
|
getJustOrNull() {
|
|
231
270
|
return null;
|
|
232
271
|
}
|
|
272
|
+
match(_onJust, onNothing) {
|
|
273
|
+
return onNothing();
|
|
274
|
+
}
|
|
233
275
|
};
|
|
234
276
|
|
|
235
277
|
// src/func/seq.ts
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Task, TaskDo, TaskDoType } from './data/task.cjs';
|
|
1
|
+
export { Task, TaskDo, TaskDoType, TaskDoTypeBase, TaskDoTypeGet, TaskDoTypeIf, TaskDoTypeIfReturn, TaskDoTypeNoGet, TaskDoTypeReturn } from './data/task.cjs';
|
|
2
2
|
export { Just, Maybe, Nothing } from './data/maybe.cjs';
|
|
3
3
|
export { Either, Left, Right } from './data/either.cjs';
|
|
4
4
|
export { seqArrayEither, seqArrayTask, seqEitherArray, seqEitherTask } from './func/seq.cjs';
|
|
@@ -9,9 +9,6 @@ var Just = class _Just extends Maybe {
|
|
|
9
9
|
super();
|
|
10
10
|
this.\u503C = \u503C;
|
|
11
11
|
}
|
|
12
|
-
match(onJust, _onNothing) {
|
|
13
|
-
return onJust(this.\u503C);
|
|
14
|
-
}
|
|
15
12
|
map(f) {
|
|
16
13
|
return new _Just(f(this.\u503C));
|
|
17
14
|
}
|
|
@@ -24,17 +21,23 @@ var Just = class _Just extends Maybe {
|
|
|
24
21
|
isNothing() {
|
|
25
22
|
return false;
|
|
26
23
|
}
|
|
24
|
+
assertJust() {
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
assertNothing() {
|
|
28
|
+
throw new Error("\u65AD\u8A00\u5931\u8D25");
|
|
29
|
+
}
|
|
27
30
|
getJust() {
|
|
28
31
|
return this.\u503C;
|
|
29
32
|
}
|
|
30
33
|
getJustOrNull() {
|
|
31
34
|
return this.\u503C;
|
|
32
35
|
}
|
|
36
|
+
match(onJust, _onNothing) {
|
|
37
|
+
return onJust(this.\u503C);
|
|
38
|
+
}
|
|
33
39
|
};
|
|
34
40
|
var Nothing = class _Nothing extends Maybe {
|
|
35
|
-
match(_onJust, onNothing) {
|
|
36
|
-
return onNothing();
|
|
37
|
-
}
|
|
38
41
|
map(_f) {
|
|
39
42
|
return new _Nothing();
|
|
40
43
|
}
|
|
@@ -47,9 +50,18 @@ var Nothing = class _Nothing extends Maybe {
|
|
|
47
50
|
isNothing() {
|
|
48
51
|
return true;
|
|
49
52
|
}
|
|
53
|
+
assertJust() {
|
|
54
|
+
throw new Error("\u65AD\u8A00\u5931\u8D25");
|
|
55
|
+
}
|
|
56
|
+
assertNothing() {
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
50
59
|
getJustOrNull() {
|
|
51
60
|
return null;
|
|
52
61
|
}
|
|
62
|
+
match(_onJust, onNothing) {
|
|
63
|
+
return onNothing();
|
|
64
|
+
}
|
|
53
65
|
};
|
|
54
66
|
|
|
55
67
|
export {
|
|
@@ -11,25 +11,52 @@ var TaskDo = class _TaskDo {
|
|
|
11
11
|
let(name, task) {
|
|
12
12
|
return new _TaskDo(
|
|
13
13
|
this.accTask.bind(
|
|
14
|
-
(a) => Task.pure(task(a.env)).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue:
|
|
14
|
+
(a) => Task.pure(task(a.env)).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue: a.lastValue }))
|
|
15
15
|
)
|
|
16
16
|
);
|
|
17
17
|
}
|
|
18
18
|
bind(name, task) {
|
|
19
19
|
return new _TaskDo(
|
|
20
|
-
this.accTask.bind(
|
|
20
|
+
this.accTask.bind(
|
|
21
|
+
(a) => task(a.env).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue: a.lastValue }))
|
|
22
|
+
)
|
|
21
23
|
);
|
|
22
24
|
}
|
|
23
25
|
exec(task) {
|
|
24
|
-
return new _TaskDo(
|
|
26
|
+
return new _TaskDo(
|
|
27
|
+
this.accTask.bind((a) => task(a.env).bind(() => Task.pure({ env: a.env, lastValue: a.lastValue })))
|
|
28
|
+
);
|
|
25
29
|
}
|
|
26
30
|
effect(task) {
|
|
31
|
+
return new _TaskDo(
|
|
32
|
+
this.accTask.bind((a) => Task.pure(task(a.env)).bind(() => Task.pure({ env: a.env, lastValue: a.lastValue })))
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
pure(task) {
|
|
27
36
|
return new _TaskDo(
|
|
28
37
|
this.accTask.bind((a) => Task.pure(task(a.env)).bind((v) => Task.pure({ env: a.env, lastValue: v })))
|
|
29
38
|
);
|
|
30
39
|
}
|
|
31
|
-
|
|
32
|
-
return new _TaskDo(
|
|
40
|
+
if(cond, task) {
|
|
41
|
+
return new _TaskDo(
|
|
42
|
+
this.accTask.bind(
|
|
43
|
+
(a) => Task.pure(cond(a.env)).bind(
|
|
44
|
+
(c) => c ? Task.pure(task(a.env)).bind((x) => Task.pure({ env: a.env, lastValue: x, lock: true })) : Task.pure({
|
|
45
|
+
env: a.env,
|
|
46
|
+
/*从类型可以确保if没命中的情况pureIf来补充正确的候选值, 所以这里跳过ts检查*/
|
|
47
|
+
lastValue: a.lastValue,
|
|
48
|
+
lock: false
|
|
49
|
+
})
|
|
50
|
+
)
|
|
51
|
+
)
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
pureR(task) {
|
|
55
|
+
return new _TaskDo(
|
|
56
|
+
this.accTask.bind(
|
|
57
|
+
(a) => a.lock ? Task.pure(a) : Task.pure(task(a.env)).bind((v) => Task.pure({ env: a.env, lastValue: v }))
|
|
58
|
+
)
|
|
59
|
+
);
|
|
33
60
|
}
|
|
34
61
|
getTask() {
|
|
35
62
|
return new Task(async () => {
|
|
@@ -56,6 +83,9 @@ var Task = class _Task {
|
|
|
56
83
|
run() {
|
|
57
84
|
return this.f();
|
|
58
85
|
}
|
|
86
|
+
do() {
|
|
87
|
+
return new TaskDo(this.bind((a) => _Task.pure({ env: {}, lastValue: a })));
|
|
88
|
+
}
|
|
59
89
|
async tryRun() {
|
|
60
90
|
try {
|
|
61
91
|
return new Right(await this.run());
|
package/dist/esm/data/maybe.d.ts
CHANGED
|
@@ -4,27 +4,33 @@ declare abstract class Maybe<A> {
|
|
|
4
4
|
abstract bind<B>(f: (a: A) => Maybe<B>): Maybe<B>;
|
|
5
5
|
abstract isJust(): this is Just<A>;
|
|
6
6
|
abstract isNothing(): this is Nothing<A>;
|
|
7
|
+
abstract assertJust(): Just<A>;
|
|
8
|
+
abstract assertNothing(): Nothing<A>;
|
|
7
9
|
abstract getJustOrNull(): A | null;
|
|
8
10
|
abstract match<B>(onJust: (a: A) => B, onNothing: () => B): B;
|
|
9
11
|
}
|
|
10
12
|
declare class Just<A> extends Maybe<A> {
|
|
11
13
|
private 值;
|
|
12
14
|
constructor(值: A);
|
|
13
|
-
match<B>(onJust: (a: A) => B, _onNothing: () => B): B;
|
|
14
15
|
map<B>(f: (a: A) => B): Maybe<B>;
|
|
15
16
|
bind<B>(f: (a: A) => Maybe<B>): Maybe<B>;
|
|
16
17
|
isJust(): this is Just<A>;
|
|
17
18
|
isNothing(): this is Nothing<A>;
|
|
19
|
+
assertJust(): Just<A>;
|
|
20
|
+
assertNothing(): Nothing<A>;
|
|
18
21
|
getJust(): A;
|
|
19
22
|
getJustOrNull(): A | null;
|
|
23
|
+
match<B>(onJust: (a: A) => B, _onNothing: () => B): B;
|
|
20
24
|
}
|
|
21
25
|
declare class Nothing<A> extends Maybe<A> {
|
|
22
|
-
match<B>(_onJust: (a: A) => B, onNothing: () => B): B;
|
|
23
26
|
map<B>(_f: (a: A) => B): Maybe<B>;
|
|
24
27
|
bind<B>(_f: (a: A) => Maybe<B>): Maybe<B>;
|
|
25
28
|
isJust(): this is Just<A>;
|
|
26
29
|
isNothing(): this is Nothing<A>;
|
|
30
|
+
assertJust(): Just<A>;
|
|
31
|
+
assertNothing(): Nothing<A>;
|
|
27
32
|
getJustOrNull(): A | null;
|
|
33
|
+
match<B>(_onJust: (a: A) => B, onNothing: () => B): B;
|
|
28
34
|
}
|
|
29
35
|
|
|
30
36
|
export { Just, Maybe, Nothing };
|
package/dist/esm/data/maybe.js
CHANGED
package/dist/esm/data/task.d.ts
CHANGED
|
@@ -1,35 +1,51 @@
|
|
|
1
1
|
import { Either } from './either.js';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
let<K extends string, X>(name: K, task: (env: Env) => X):
|
|
5
|
-
bind<K extends string, X>(name: K, task: (env: Env) => Task<X>):
|
|
6
|
-
exec<X>(task: (env: Env) => Task<X>):
|
|
7
|
-
effect<X>(task: (env: Env) => X):
|
|
8
|
-
|
|
3
|
+
type TaskDoTypeBase<Env extends Record<string, any>, A> = {
|
|
4
|
+
let<K extends string, X>(name: K, task: (env: Env) => X): TaskDoTypeNoGet<Env & Record<K, X>, A>;
|
|
5
|
+
bind<K extends string, X>(name: K, task: (env: Env) => Task<X>): TaskDoTypeNoGet<Env & Record<K, X>, A>;
|
|
6
|
+
exec<X>(task: (env: Env) => Task<X>): TaskDoTypeNoGet<Env, A>;
|
|
7
|
+
effect<X>(task: (env: Env) => X): TaskDoTypeNoGet<Env, A>;
|
|
8
|
+
};
|
|
9
|
+
type TaskDoTypeReturn<Env extends Record<string, any>, _A> = {
|
|
10
|
+
pure<X>(task: (env: Env) => X): TaskDoTypeGet<Env, X>;
|
|
11
|
+
};
|
|
12
|
+
type TaskDoTypeIf<Env extends Record<string, any>, _A> = {
|
|
13
|
+
if<X>(cond: (env: Env) => boolean, task: (env: Env) => X): TaskDoTypeIfReturn<Env, X>;
|
|
14
|
+
};
|
|
15
|
+
type TaskDoTypeIfReturn<Env extends Record<string, any>, A> = {
|
|
16
|
+
pureR(task: (env: Env) => A): TaskDoTypeGet<Env, A>;
|
|
17
|
+
};
|
|
18
|
+
type TaskDoTypeGet<_Env extends Record<string, any>, A> = {
|
|
9
19
|
getTask(): Task<A>;
|
|
10
|
-
}
|
|
20
|
+
};
|
|
21
|
+
type TaskDoTypeNoGet<Env extends Record<string, any>, A> = TaskDoTypeBase<Env, A> & TaskDoTypeReturn<Env, A> & TaskDoTypeIf<Env, A>;
|
|
22
|
+
type TaskDoType<Env extends Record<string, any>, A> = TaskDoTypeBase<Env, A> & TaskDoTypeReturn<Env, A> & TaskDoTypeGet<Env, A> & TaskDoTypeIf<Env, A> & TaskDoTypeIfReturn<Env, A>;
|
|
11
23
|
declare class TaskDo<Env extends Record<string, any>, A> implements TaskDoType<Env, A> {
|
|
12
24
|
private accTask;
|
|
13
25
|
constructor(accTask: Task<{
|
|
14
26
|
env: Env;
|
|
15
27
|
lastValue: A;
|
|
28
|
+
lock?: boolean;
|
|
16
29
|
}>);
|
|
17
|
-
let<K extends string, X>(name: K, task: (env: Env) => X):
|
|
18
|
-
bind<K extends string, X>(name: K, task: (env: Env) => Task<X>):
|
|
19
|
-
exec<X>(task: (env: Env) => Task<X>):
|
|
20
|
-
effect<X>(task: (env: Env) => X):
|
|
21
|
-
pure<X>(
|
|
30
|
+
let<K extends string, X>(name: K, task: (env: Env) => X): TaskDoTypeNoGet<Env & Record<K, X>, A>;
|
|
31
|
+
bind<K extends string, X>(name: K, task: (env: Env) => Task<X>): TaskDoTypeNoGet<Env & Record<K, X>, A>;
|
|
32
|
+
exec<X>(task: (env: Env) => Task<X>): TaskDoTypeNoGet<Env, A>;
|
|
33
|
+
effect<X>(task: (env: Env) => X): TaskDoTypeNoGet<Env, A>;
|
|
34
|
+
pure<X>(task: (env: Env) => X): TaskDoTypeGet<Env, X>;
|
|
35
|
+
if<X>(cond: (env: Env) => boolean, task: (env: Env) => X): TaskDoTypeIfReturn<Env, X>;
|
|
36
|
+
pureR(task: (env: Env) => A): TaskDoTypeGet<Env, A>;
|
|
22
37
|
getTask(): Task<A>;
|
|
23
38
|
}
|
|
24
39
|
declare class Task<A> {
|
|
25
40
|
private f;
|
|
26
41
|
static pure<A>(a: A): Task<A>;
|
|
27
|
-
static do():
|
|
42
|
+
static do(): TaskDoTypeBase<Record<string, any>, void>;
|
|
28
43
|
constructor(f: () => Promise<A>);
|
|
29
44
|
map<B>(f: (a: A) => B): Task<B>;
|
|
30
45
|
bind<B>(f: (a: A) => Task<B>): Task<B>;
|
|
31
46
|
run(): Promise<A>;
|
|
47
|
+
do(): TaskDoTypeBase<{}, A>;
|
|
32
48
|
tryRun(): Promise<Either<Error, A>>;
|
|
33
49
|
}
|
|
34
50
|
|
|
35
|
-
export { Task, TaskDo, type TaskDoType };
|
|
51
|
+
export { Task, TaskDo, type TaskDoType, type TaskDoTypeBase, type TaskDoTypeGet, type TaskDoTypeIf, type TaskDoTypeIfReturn, type TaskDoTypeNoGet, type TaskDoTypeReturn };
|
package/dist/esm/data/task.js
CHANGED
package/dist/esm/func/seq.js
CHANGED
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Task, TaskDo, TaskDoType } from './data/task.js';
|
|
1
|
+
export { Task, TaskDo, TaskDoType, TaskDoTypeBase, TaskDoTypeGet, TaskDoTypeIf, TaskDoTypeIfReturn, TaskDoTypeNoGet, TaskDoTypeReturn } from './data/task.js';
|
|
2
2
|
export { Just, Maybe, Nothing } from './data/maybe.js';
|
|
3
3
|
export { Either, Left, Right } from './data/either.js';
|
|
4
4
|
export { seqArrayEither, seqArrayTask, seqEitherArray, seqEitherTask } from './func/seq.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -2,17 +2,17 @@ import {
|
|
|
2
2
|
Just,
|
|
3
3
|
Maybe,
|
|
4
4
|
Nothing
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-CQG32QQC.js";
|
|
6
6
|
import {
|
|
7
7
|
seqArrayEither,
|
|
8
8
|
seqArrayTask,
|
|
9
9
|
seqEitherArray,
|
|
10
10
|
seqEitherTask
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-IHXXIFRN.js";
|
|
12
12
|
import {
|
|
13
13
|
Task,
|
|
14
14
|
TaskDo
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-OYLE35IQ.js";
|
|
16
16
|
import {
|
|
17
17
|
Either,
|
|
18
18
|
Left,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lsby/ts-fp-data",
|
|
3
|
-
"version": "0.0.9
|
|
3
|
+
"version": "0.0.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"require": "./dist/cjs/index.cjs",
|
|
@@ -9,22 +9,24 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
"dist"
|
|
11
11
|
],
|
|
12
|
-
"dependencies": {},
|
|
13
12
|
"devDependencies": {
|
|
14
13
|
"@ianvs/prettier-plugin-sort-imports": "^4.2.1",
|
|
15
14
|
"@types/node": "^20.12.10",
|
|
16
15
|
"@typescript-eslint/eslint-plugin": "^7.8.0",
|
|
17
16
|
"@typescript-eslint/parser": "^7.8.0",
|
|
17
|
+
"@vitest/coverage-v8": "^2.0.2",
|
|
18
18
|
"bumpp": "^9.4.1",
|
|
19
19
|
"eslint": "^8.56.0",
|
|
20
20
|
"eslint-config-prettier": "^9.1.0",
|
|
21
21
|
"eslint-plugin-sort-class-members": "^1.20.0",
|
|
22
22
|
"eslint-plugin-unused-imports": "^3.2.0",
|
|
23
|
+
"open-cli": "^8.0.0",
|
|
23
24
|
"prettier": "3.2.5",
|
|
24
25
|
"prettier-plugin-packagejson": "^2.5.0",
|
|
25
26
|
"tsup": "^8.0.2",
|
|
26
27
|
"tsx": "^4.9.3",
|
|
27
|
-
"typescript": "^5.4.5"
|
|
28
|
+
"typescript": "^5.4.5",
|
|
29
|
+
"vitest": "^2.0.2"
|
|
28
30
|
},
|
|
29
31
|
"scripts": {
|
|
30
32
|
"build:all": "npm run build:cjs && npm run build:esm",
|
|
@@ -37,6 +39,7 @@
|
|
|
37
39
|
"other:typecheck": "tsc --noEmit",
|
|
38
40
|
"other:typecheck:watch": "tsc --noEmit -w",
|
|
39
41
|
"run:start": "tsx src/index.ts",
|
|
40
|
-
"
|
|
42
|
+
"test:base": "vitest run",
|
|
43
|
+
"test:coverage": "vitest run --coverage && open-cli ./coverage/index.html"
|
|
41
44
|
}
|
|
42
45
|
}
|