@lsby/ts-fp-data 0.2.0 → 0.2.2
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/either.cjs +14 -1
- package/dist/cjs/data/either.d.cts +9 -1
- package/dist/cjs/data/task.cjs +15 -1
- package/dist/cjs/data/task.d.cts +1 -0
- package/dist/cjs/func/seq.cjs +25 -1
- package/dist/cjs/func/seq.d.cts +4 -1
- package/dist/cjs/index.cjs +25 -1
- package/dist/cjs/index.d.cts +3 -2
- package/dist/cjs/types/types.cjs +18 -0
- package/dist/cjs/types/types.d.cts +3 -0
- package/dist/esm/{chunk-IB4BVSOW.js → chunk-7HK3EH67.js} +2 -1
- package/dist/esm/{chunk-UTZJVGHH.js → chunk-IWR6QS6U.js} +10 -2
- package/dist/esm/{chunk-BE7V6GBG.js → chunk-MUPBOWCK.js} +14 -1
- package/dist/esm/data/either.d.ts +9 -1
- package/dist/esm/data/either.js +1 -1
- package/dist/esm/data/task.d.ts +1 -0
- package/dist/esm/data/task.js +2 -2
- package/dist/esm/func/seq.d.ts +4 -1
- package/dist/esm/func/seq.js +7 -3
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.js +12 -8
- package/dist/esm/types/types.d.ts +3 -0
- package/dist/esm/types/types.js +0 -0
- package/package.json +4 -3
package/dist/cjs/data/either.cjs
CHANGED
|
@@ -99,10 +99,17 @@ var Nothing = class _Nothing extends Maybe {
|
|
|
99
99
|
};
|
|
100
100
|
|
|
101
101
|
// src/data/either.ts
|
|
102
|
-
var Either = class {
|
|
102
|
+
var Either = class _Either {
|
|
103
103
|
static pure(a) {
|
|
104
104
|
return new Right(a);
|
|
105
105
|
}
|
|
106
|
+
static lift(arr, f) {
|
|
107
|
+
const \u7B2C\u4E00\u4E2A\u5DE6\u503C = arr.find((a) => a.getTag() == "Left");
|
|
108
|
+
if (\u7B2C\u4E00\u4E2A\u5DE6\u503C != null) {
|
|
109
|
+
return \u7B2C\u4E00\u4E2A\u5DE6\u503C;
|
|
110
|
+
}
|
|
111
|
+
return _Either.pure(f(arr.map((a) => a.assertRight().getRight())));
|
|
112
|
+
}
|
|
106
113
|
};
|
|
107
114
|
var Left = class _Left extends Either {
|
|
108
115
|
constructor(\u503C) {
|
|
@@ -130,6 +137,9 @@ var Left = class _Left extends Either {
|
|
|
130
137
|
getValue() {
|
|
131
138
|
return this.\u503C;
|
|
132
139
|
}
|
|
140
|
+
getTag() {
|
|
141
|
+
return "Left";
|
|
142
|
+
}
|
|
133
143
|
assertLeft() {
|
|
134
144
|
return this;
|
|
135
145
|
}
|
|
@@ -172,6 +182,9 @@ var Right = class _Right extends Either {
|
|
|
172
182
|
getValue() {
|
|
173
183
|
return this.\u503C;
|
|
174
184
|
}
|
|
185
|
+
getTag() {
|
|
186
|
+
return "Right";
|
|
187
|
+
}
|
|
175
188
|
assertLeft() {
|
|
176
189
|
throw new Error("\u65AD\u8A00\u5931\u8D25");
|
|
177
190
|
}
|
|
@@ -1,13 +1,19 @@
|
|
|
1
|
+
import { 元组转联合 as _____ } from '../types/types.cjs';
|
|
1
2
|
import { Maybe } from './maybe.cjs';
|
|
2
3
|
|
|
4
|
+
type 任意Either = Either<any, any>;
|
|
5
|
+
type 计算右值们<A> = A extends [] ? [] : A extends [infer x, ...infer xs] ? x extends Either<unknown, infer c> ? [c, ...计算右值们<xs>] : never : never;
|
|
6
|
+
type 计算左值们<A> = A extends [] ? [] : A extends [infer x, ...infer xs] ? x extends Either<infer c, unknown> ? [c, ...计算左值们<xs>] : never : never;
|
|
3
7
|
declare abstract class Either<L, R> {
|
|
4
8
|
static pure<L, R>(a: R): Either<L, R>;
|
|
9
|
+
static lift<B, Arr extends 任意Either[]>(arr: [...Arr], f: (a: 计算右值们<Arr>) => B): Either<_____<计算左值们<Arr>>, B>;
|
|
5
10
|
abstract map<B>(_f: (a: R) => B): Either<L, B>;
|
|
6
11
|
abstract mapLeft<B>(f: (a: L) => B): Either<B, R>;
|
|
7
12
|
abstract bind<B>(_f: (a: R) => Either<L, B>): Either<L, B>;
|
|
8
13
|
abstract isLeft(): this is Left<L, R>;
|
|
9
14
|
abstract isRight(): this is Right<L, R>;
|
|
10
15
|
abstract getValue(): L | R;
|
|
16
|
+
abstract getTag(): 'Left' | 'Right';
|
|
11
17
|
abstract assertLeft(): Left<L, R>;
|
|
12
18
|
abstract assertRight(): Right<L, R>;
|
|
13
19
|
abstract match<X>(onLeft: (a: L) => X, onRight: (a: R) => X): X;
|
|
@@ -24,6 +30,7 @@ declare class Left<L, R> extends Either<L, R> {
|
|
|
24
30
|
isRight(): this is Right<L, R>;
|
|
25
31
|
getLeft(): L;
|
|
26
32
|
getValue(): L | R;
|
|
33
|
+
getTag(): 'Left' | 'Right';
|
|
27
34
|
assertLeft(): Left<L, R>;
|
|
28
35
|
assertRight(): Right<L, R>;
|
|
29
36
|
match<X>(onLeft: (a: L) => X, _onRight: (a: R) => X): X;
|
|
@@ -40,6 +47,7 @@ declare class Right<L, R> extends Either<L, R> {
|
|
|
40
47
|
isRight(): this is Right<L, R>;
|
|
41
48
|
getRight(): R;
|
|
42
49
|
getValue(): L | R;
|
|
50
|
+
getTag(): 'Left' | 'Right';
|
|
43
51
|
assertLeft(): Left<L, R>;
|
|
44
52
|
assertRight(): Right<L, R>;
|
|
45
53
|
match<X>(_onLeft: (a: L) => X, onRight: (a: R) => X): X;
|
|
@@ -47,4 +55,4 @@ declare class Right<L, R> extends Either<L, R> {
|
|
|
47
55
|
toMaybe(): Maybe<R>;
|
|
48
56
|
}
|
|
49
57
|
|
|
50
|
-
export { Either, Left, Right };
|
|
58
|
+
export { Either, Left, Right, type 任意Either, type 计算右值们, type 计算左值们 };
|
package/dist/cjs/data/task.cjs
CHANGED
|
@@ -98,10 +98,17 @@ var Nothing = class _Nothing extends Maybe {
|
|
|
98
98
|
};
|
|
99
99
|
|
|
100
100
|
// src/data/either.ts
|
|
101
|
-
var Either = class {
|
|
101
|
+
var Either = class _Either {
|
|
102
102
|
static pure(a) {
|
|
103
103
|
return new Right(a);
|
|
104
104
|
}
|
|
105
|
+
static lift(arr, f) {
|
|
106
|
+
const \u7B2C\u4E00\u4E2A\u5DE6\u503C = arr.find((a) => a.getTag() == "Left");
|
|
107
|
+
if (\u7B2C\u4E00\u4E2A\u5DE6\u503C != null) {
|
|
108
|
+
return \u7B2C\u4E00\u4E2A\u5DE6\u503C;
|
|
109
|
+
}
|
|
110
|
+
return _Either.pure(f(arr.map((a) => a.assertRight().getRight())));
|
|
111
|
+
}
|
|
105
112
|
};
|
|
106
113
|
var Left = class _Left extends Either {
|
|
107
114
|
constructor(\u503C) {
|
|
@@ -129,6 +136,9 @@ var Left = class _Left extends Either {
|
|
|
129
136
|
getValue() {
|
|
130
137
|
return this.\u503C;
|
|
131
138
|
}
|
|
139
|
+
getTag() {
|
|
140
|
+
return "Left";
|
|
141
|
+
}
|
|
132
142
|
assertLeft() {
|
|
133
143
|
return this;
|
|
134
144
|
}
|
|
@@ -171,6 +181,9 @@ var Right = class _Right extends Either {
|
|
|
171
181
|
getValue() {
|
|
172
182
|
return this.\u503C;
|
|
173
183
|
}
|
|
184
|
+
getTag() {
|
|
185
|
+
return "Right";
|
|
186
|
+
}
|
|
174
187
|
assertLeft() {
|
|
175
188
|
throw new Error("\u65AD\u8A00\u5931\u8D25");
|
|
176
189
|
}
|
|
@@ -229,6 +242,7 @@ var TaskDo = class _TaskDo {
|
|
|
229
242
|
(c) => c ? Task.pure(task(a.env)).bind((x) => Task.pure({ env: a.env, lastValue: x, lock: true })) : Task.pure({
|
|
230
243
|
env: a.env,
|
|
231
244
|
/*从类型可以确保if没命中的情况pureIf来补充正确的候选值, 所以这里跳过ts检查*/
|
|
245
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
232
246
|
lastValue: a.lastValue,
|
|
233
247
|
lock: false
|
|
234
248
|
})
|
package/dist/cjs/data/task.d.cts
CHANGED
package/dist/cjs/func/seq.cjs
CHANGED
|
@@ -20,7 +20,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/func/seq.ts
|
|
21
21
|
var seq_exports = {};
|
|
22
22
|
__export(seq_exports, {
|
|
23
|
+
seqArrayEitherCollectRight: () => seqArrayEitherCollectRight,
|
|
23
24
|
seqArrayEitherFirstLeft: () => seqArrayEitherFirstLeft,
|
|
25
|
+
seqArrayMaybeCollectJust: () => seqArrayMaybeCollectJust,
|
|
24
26
|
seqArrayMaybeFirstNothing: () => seqArrayMaybeFirstNothing,
|
|
25
27
|
seqArrayTask: () => seqArrayTask,
|
|
26
28
|
seqEitherArray: () => seqEitherArray,
|
|
@@ -103,10 +105,17 @@ var Nothing = class _Nothing extends Maybe {
|
|
|
103
105
|
};
|
|
104
106
|
|
|
105
107
|
// src/data/either.ts
|
|
106
|
-
var Either = class {
|
|
108
|
+
var Either = class _Either {
|
|
107
109
|
static pure(a) {
|
|
108
110
|
return new Right(a);
|
|
109
111
|
}
|
|
112
|
+
static lift(arr, f) {
|
|
113
|
+
const \u7B2C\u4E00\u4E2A\u5DE6\u503C = arr.find((a) => a.getTag() == "Left");
|
|
114
|
+
if (\u7B2C\u4E00\u4E2A\u5DE6\u503C != null) {
|
|
115
|
+
return \u7B2C\u4E00\u4E2A\u5DE6\u503C;
|
|
116
|
+
}
|
|
117
|
+
return _Either.pure(f(arr.map((a) => a.assertRight().getRight())));
|
|
118
|
+
}
|
|
110
119
|
};
|
|
111
120
|
var Left = class _Left extends Either {
|
|
112
121
|
constructor(\u503C) {
|
|
@@ -134,6 +143,9 @@ var Left = class _Left extends Either {
|
|
|
134
143
|
getValue() {
|
|
135
144
|
return this.\u503C;
|
|
136
145
|
}
|
|
146
|
+
getTag() {
|
|
147
|
+
return "Left";
|
|
148
|
+
}
|
|
137
149
|
assertLeft() {
|
|
138
150
|
return this;
|
|
139
151
|
}
|
|
@@ -176,6 +188,9 @@ var Right = class _Right extends Either {
|
|
|
176
188
|
getValue() {
|
|
177
189
|
return this.\u503C;
|
|
178
190
|
}
|
|
191
|
+
getTag() {
|
|
192
|
+
return "Right";
|
|
193
|
+
}
|
|
179
194
|
assertLeft() {
|
|
180
195
|
throw new Error("\u65AD\u8A00\u5931\u8D25");
|
|
181
196
|
}
|
|
@@ -234,6 +249,7 @@ var TaskDo = class _TaskDo {
|
|
|
234
249
|
(c) => c ? Task.pure(task(a.env)).bind((x) => Task.pure({ env: a.env, lastValue: x, lock: true })) : Task.pure({
|
|
235
250
|
env: a.env,
|
|
236
251
|
/*从类型可以确保if没命中的情况pureIf来补充正确的候选值, 所以这里跳过ts检查*/
|
|
252
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
237
253
|
lastValue: a.lastValue,
|
|
238
254
|
lock: false
|
|
239
255
|
})
|
|
@@ -312,6 +328,9 @@ function seqArrayEitherFirstLeft(value) {
|
|
|
312
328
|
var data = value.map((a) => a.assertRight().getRight());
|
|
313
329
|
return new Right(data);
|
|
314
330
|
}
|
|
331
|
+
function seqArrayEitherCollectRight(value) {
|
|
332
|
+
return seqArrayEitherFirstLeft(value.filter((a) => a.isRight()));
|
|
333
|
+
}
|
|
315
334
|
function seqArrayMaybeFirstNothing(a) {
|
|
316
335
|
const firstNothing = a.find((maybe) => maybe.isNothing());
|
|
317
336
|
if (firstNothing)
|
|
@@ -319,6 +338,9 @@ function seqArrayMaybeFirstNothing(a) {
|
|
|
319
338
|
const values = a.map((maybe) => maybe.assertJust().getJust());
|
|
320
339
|
return new Just(values);
|
|
321
340
|
}
|
|
341
|
+
function seqArrayMaybeCollectJust(a) {
|
|
342
|
+
return seqArrayMaybeFirstNothing(a.filter((a2) => a2.isJust()));
|
|
343
|
+
}
|
|
322
344
|
function seqMaybeArray(a) {
|
|
323
345
|
return a.match(
|
|
324
346
|
() => [new Nothing()],
|
|
@@ -333,7 +355,9 @@ function seqMaybeTask(a) {
|
|
|
333
355
|
}
|
|
334
356
|
// Annotate the CommonJS export names for ESM import in node:
|
|
335
357
|
0 && (module.exports = {
|
|
358
|
+
seqArrayEitherCollectRight,
|
|
336
359
|
seqArrayEitherFirstLeft,
|
|
360
|
+
seqArrayMaybeCollectJust,
|
|
337
361
|
seqArrayMaybeFirstNothing,
|
|
338
362
|
seqArrayTask,
|
|
339
363
|
seqEitherArray,
|
package/dist/cjs/func/seq.d.cts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { Either } from '../data/either.cjs';
|
|
2
2
|
import { Maybe } from '../data/maybe.cjs';
|
|
3
3
|
import { Task } from '../data/task.cjs';
|
|
4
|
+
import '../types/types.cjs';
|
|
4
5
|
|
|
5
6
|
declare function seqArrayTask<A>(a: Array<Task<A>>): Task<Array<A>>;
|
|
6
7
|
declare function seqEitherTask<L, R>(value: Either<L, Task<R>>): Task<Either<L, R>>;
|
|
7
8
|
declare function seqEitherArray<A, B>(value: Either<A, Array<B>>): Array<Either<A, B>>;
|
|
8
9
|
declare function seqArrayEitherFirstLeft<A, B>(value: Array<Either<A, B>>): Either<A, Array<B>>;
|
|
10
|
+
declare function seqArrayEitherCollectRight<A, B>(value: Array<Either<A, B>>): Either<A, Array<B>>;
|
|
9
11
|
declare function seqArrayMaybeFirstNothing<X>(a: Array<Maybe<X>>): Maybe<Array<X>>;
|
|
12
|
+
declare function seqArrayMaybeCollectJust<X>(a: Array<Maybe<X>>): Maybe<Array<X>>;
|
|
10
13
|
declare function seqMaybeArray<X>(a: Maybe<Array<X>>): Array<Maybe<X>>;
|
|
11
14
|
declare function seqMaybeTask<X>(a: Maybe<Task<X>>): Task<Maybe<X>>;
|
|
12
15
|
|
|
13
|
-
export { seqArrayEitherFirstLeft, seqArrayMaybeFirstNothing, seqArrayTask, seqEitherArray, seqEitherTask, seqMaybeArray, seqMaybeTask };
|
|
16
|
+
export { seqArrayEitherCollectRight, seqArrayEitherFirstLeft, seqArrayMaybeCollectJust, seqArrayMaybeFirstNothing, seqArrayTask, seqEitherArray, seqEitherTask, seqMaybeArray, seqMaybeTask };
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -31,7 +31,9 @@ __export(src_exports, {
|
|
|
31
31
|
Right: () => Right,
|
|
32
32
|
Task: () => Task,
|
|
33
33
|
TaskDo: () => TaskDo,
|
|
34
|
+
seqArrayEitherCollectRight: () => seqArrayEitherCollectRight,
|
|
34
35
|
seqArrayEitherFirstLeft: () => seqArrayEitherFirstLeft,
|
|
36
|
+
seqArrayMaybeCollectJust: () => seqArrayMaybeCollectJust,
|
|
35
37
|
seqArrayMaybeFirstNothing: () => seqArrayMaybeFirstNothing,
|
|
36
38
|
seqArrayTask: () => seqArrayTask,
|
|
37
39
|
seqEitherArray: () => seqEitherArray,
|
|
@@ -114,10 +116,17 @@ var Nothing = class _Nothing extends Maybe {
|
|
|
114
116
|
};
|
|
115
117
|
|
|
116
118
|
// src/data/either.ts
|
|
117
|
-
var Either = class {
|
|
119
|
+
var Either = class _Either {
|
|
118
120
|
static pure(a) {
|
|
119
121
|
return new Right(a);
|
|
120
122
|
}
|
|
123
|
+
static lift(arr, f) {
|
|
124
|
+
const \u7B2C\u4E00\u4E2A\u5DE6\u503C = arr.find((a) => a.getTag() == "Left");
|
|
125
|
+
if (\u7B2C\u4E00\u4E2A\u5DE6\u503C != null) {
|
|
126
|
+
return \u7B2C\u4E00\u4E2A\u5DE6\u503C;
|
|
127
|
+
}
|
|
128
|
+
return _Either.pure(f(arr.map((a) => a.assertRight().getRight())));
|
|
129
|
+
}
|
|
121
130
|
};
|
|
122
131
|
var Left = class _Left extends Either {
|
|
123
132
|
constructor(\u503C) {
|
|
@@ -145,6 +154,9 @@ var Left = class _Left extends Either {
|
|
|
145
154
|
getValue() {
|
|
146
155
|
return this.\u503C;
|
|
147
156
|
}
|
|
157
|
+
getTag() {
|
|
158
|
+
return "Left";
|
|
159
|
+
}
|
|
148
160
|
assertLeft() {
|
|
149
161
|
return this;
|
|
150
162
|
}
|
|
@@ -187,6 +199,9 @@ var Right = class _Right extends Either {
|
|
|
187
199
|
getValue() {
|
|
188
200
|
return this.\u503C;
|
|
189
201
|
}
|
|
202
|
+
getTag() {
|
|
203
|
+
return "Right";
|
|
204
|
+
}
|
|
190
205
|
assertLeft() {
|
|
191
206
|
throw new Error("\u65AD\u8A00\u5931\u8D25");
|
|
192
207
|
}
|
|
@@ -277,6 +292,7 @@ var TaskDo = class _TaskDo {
|
|
|
277
292
|
(c) => c ? Task.pure(task(a.env)).bind((x) => Task.pure({ env: a.env, lastValue: x, lock: true })) : Task.pure({
|
|
278
293
|
env: a.env,
|
|
279
294
|
/*从类型可以确保if没命中的情况pureIf来补充正确的候选值, 所以这里跳过ts检查*/
|
|
295
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
280
296
|
lastValue: a.lastValue,
|
|
281
297
|
lock: false
|
|
282
298
|
})
|
|
@@ -355,6 +371,9 @@ function seqArrayEitherFirstLeft(value) {
|
|
|
355
371
|
var data = value.map((a) => a.assertRight().getRight());
|
|
356
372
|
return new Right(data);
|
|
357
373
|
}
|
|
374
|
+
function seqArrayEitherCollectRight(value) {
|
|
375
|
+
return seqArrayEitherFirstLeft(value.filter((a) => a.isRight()));
|
|
376
|
+
}
|
|
358
377
|
function seqArrayMaybeFirstNothing(a) {
|
|
359
378
|
const firstNothing = a.find((maybe) => maybe.isNothing());
|
|
360
379
|
if (firstNothing)
|
|
@@ -362,6 +381,9 @@ function seqArrayMaybeFirstNothing(a) {
|
|
|
362
381
|
const values = a.map((maybe) => maybe.assertJust().getJust());
|
|
363
382
|
return new Just(values);
|
|
364
383
|
}
|
|
384
|
+
function seqArrayMaybeCollectJust(a) {
|
|
385
|
+
return seqArrayMaybeFirstNothing(a.filter((a2) => a2.isJust()));
|
|
386
|
+
}
|
|
365
387
|
function seqMaybeArray(a) {
|
|
366
388
|
return a.match(
|
|
367
389
|
() => [new Nothing()],
|
|
@@ -387,7 +409,9 @@ function seqMaybeTask(a) {
|
|
|
387
409
|
Right,
|
|
388
410
|
Task,
|
|
389
411
|
TaskDo,
|
|
412
|
+
seqArrayEitherCollectRight,
|
|
390
413
|
seqArrayEitherFirstLeft,
|
|
414
|
+
seqArrayMaybeCollectJust,
|
|
391
415
|
seqArrayMaybeFirstNothing,
|
|
392
416
|
seqArrayTask,
|
|
393
417
|
seqEitherArray,
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { Either, Left, Right } from './data/either.cjs';
|
|
1
|
+
export { Either, Left, Right, 任意Either, 计算右值们, 计算左值们 } from './data/either.cjs';
|
|
2
2
|
export { Lazy, LazyDeferValue, LazyForceValue } from './data/lazy.cjs';
|
|
3
3
|
export { Just, Maybe, Nothing } from './data/maybe.cjs';
|
|
4
4
|
export { Task, TaskDo, TaskDoType, TaskDoTypeBase, TaskDoTypeGet, TaskDoTypeIf, TaskDoTypeIfReturn, TaskDoTypeNoGet, TaskDoTypeReturn } from './data/task.cjs';
|
|
5
|
-
export { seqArrayEitherFirstLeft, seqArrayMaybeFirstNothing, seqArrayTask, seqEitherArray, seqEitherTask, seqMaybeArray, seqMaybeTask } from './func/seq.cjs';
|
|
5
|
+
export { seqArrayEitherCollectRight, seqArrayEitherFirstLeft, seqArrayMaybeCollectJust, seqArrayMaybeFirstNothing, seqArrayTask, seqEitherArray, seqEitherTask, seqMaybeArray, seqMaybeTask } from './func/seq.cjs';
|
|
6
|
+
import './types/types.cjs';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
|
|
16
|
+
// src/types/types.ts
|
|
17
|
+
var types_exports = {};
|
|
18
|
+
module.exports = __toCommonJS(types_exports);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Left,
|
|
3
3
|
Right
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MUPBOWCK.js";
|
|
5
5
|
|
|
6
6
|
// src/data/task.ts
|
|
7
7
|
var TaskDo = class _TaskDo {
|
|
@@ -44,6 +44,7 @@ var TaskDo = class _TaskDo {
|
|
|
44
44
|
(c) => c ? Task.pure(task(a.env)).bind((x) => Task.pure({ env: a.env, lastValue: x, lock: true })) : Task.pure({
|
|
45
45
|
env: a.env,
|
|
46
46
|
/*从类型可以确保if没命中的情况pureIf来补充正确的候选值, 所以这里跳过ts检查*/
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
47
48
|
lastValue: a.lastValue,
|
|
48
49
|
lock: false
|
|
49
50
|
})
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Task
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-7HK3EH67.js";
|
|
4
4
|
import {
|
|
5
5
|
Left,
|
|
6
6
|
Right
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-MUPBOWCK.js";
|
|
8
8
|
import {
|
|
9
9
|
Just,
|
|
10
10
|
Nothing
|
|
@@ -35,6 +35,9 @@ function seqArrayEitherFirstLeft(value) {
|
|
|
35
35
|
var data = value.map((a) => a.assertRight().getRight());
|
|
36
36
|
return new Right(data);
|
|
37
37
|
}
|
|
38
|
+
function seqArrayEitherCollectRight(value) {
|
|
39
|
+
return seqArrayEitherFirstLeft(value.filter((a) => a.isRight()));
|
|
40
|
+
}
|
|
38
41
|
function seqArrayMaybeFirstNothing(a) {
|
|
39
42
|
const firstNothing = a.find((maybe) => maybe.isNothing());
|
|
40
43
|
if (firstNothing)
|
|
@@ -42,6 +45,9 @@ function seqArrayMaybeFirstNothing(a) {
|
|
|
42
45
|
const values = a.map((maybe) => maybe.assertJust().getJust());
|
|
43
46
|
return new Just(values);
|
|
44
47
|
}
|
|
48
|
+
function seqArrayMaybeCollectJust(a) {
|
|
49
|
+
return seqArrayMaybeFirstNothing(a.filter((a2) => a2.isJust()));
|
|
50
|
+
}
|
|
45
51
|
function seqMaybeArray(a) {
|
|
46
52
|
return a.match(
|
|
47
53
|
() => [new Nothing()],
|
|
@@ -60,7 +66,9 @@ export {
|
|
|
60
66
|
seqEitherTask,
|
|
61
67
|
seqEitherArray,
|
|
62
68
|
seqArrayEitherFirstLeft,
|
|
69
|
+
seqArrayEitherCollectRight,
|
|
63
70
|
seqArrayMaybeFirstNothing,
|
|
71
|
+
seqArrayMaybeCollectJust,
|
|
64
72
|
seqMaybeArray,
|
|
65
73
|
seqMaybeTask
|
|
66
74
|
};
|
|
@@ -4,10 +4,17 @@ import {
|
|
|
4
4
|
} from "./chunk-NXA54GUD.js";
|
|
5
5
|
|
|
6
6
|
// src/data/either.ts
|
|
7
|
-
var Either = class {
|
|
7
|
+
var Either = class _Either {
|
|
8
8
|
static pure(a) {
|
|
9
9
|
return new Right(a);
|
|
10
10
|
}
|
|
11
|
+
static lift(arr, f) {
|
|
12
|
+
const \u7B2C\u4E00\u4E2A\u5DE6\u503C = arr.find((a) => a.getTag() == "Left");
|
|
13
|
+
if (\u7B2C\u4E00\u4E2A\u5DE6\u503C != null) {
|
|
14
|
+
return \u7B2C\u4E00\u4E2A\u5DE6\u503C;
|
|
15
|
+
}
|
|
16
|
+
return _Either.pure(f(arr.map((a) => a.assertRight().getRight())));
|
|
17
|
+
}
|
|
11
18
|
};
|
|
12
19
|
var Left = class _Left extends Either {
|
|
13
20
|
constructor(\u503C) {
|
|
@@ -35,6 +42,9 @@ var Left = class _Left extends Either {
|
|
|
35
42
|
getValue() {
|
|
36
43
|
return this.\u503C;
|
|
37
44
|
}
|
|
45
|
+
getTag() {
|
|
46
|
+
return "Left";
|
|
47
|
+
}
|
|
38
48
|
assertLeft() {
|
|
39
49
|
return this;
|
|
40
50
|
}
|
|
@@ -77,6 +87,9 @@ var Right = class _Right extends Either {
|
|
|
77
87
|
getValue() {
|
|
78
88
|
return this.\u503C;
|
|
79
89
|
}
|
|
90
|
+
getTag() {
|
|
91
|
+
return "Right";
|
|
92
|
+
}
|
|
80
93
|
assertLeft() {
|
|
81
94
|
throw new Error("\u65AD\u8A00\u5931\u8D25");
|
|
82
95
|
}
|
|
@@ -1,13 +1,19 @@
|
|
|
1
|
+
import { 元组转联合 as _____ } from '../types/types.js';
|
|
1
2
|
import { Maybe } from './maybe.js';
|
|
2
3
|
|
|
4
|
+
type 任意Either = Either<any, any>;
|
|
5
|
+
type 计算右值们<A> = A extends [] ? [] : A extends [infer x, ...infer xs] ? x extends Either<unknown, infer c> ? [c, ...计算右值们<xs>] : never : never;
|
|
6
|
+
type 计算左值们<A> = A extends [] ? [] : A extends [infer x, ...infer xs] ? x extends Either<infer c, unknown> ? [c, ...计算左值们<xs>] : never : never;
|
|
3
7
|
declare abstract class Either<L, R> {
|
|
4
8
|
static pure<L, R>(a: R): Either<L, R>;
|
|
9
|
+
static lift<B, Arr extends 任意Either[]>(arr: [...Arr], f: (a: 计算右值们<Arr>) => B): Either<_____<计算左值们<Arr>>, B>;
|
|
5
10
|
abstract map<B>(_f: (a: R) => B): Either<L, B>;
|
|
6
11
|
abstract mapLeft<B>(f: (a: L) => B): Either<B, R>;
|
|
7
12
|
abstract bind<B>(_f: (a: R) => Either<L, B>): Either<L, B>;
|
|
8
13
|
abstract isLeft(): this is Left<L, R>;
|
|
9
14
|
abstract isRight(): this is Right<L, R>;
|
|
10
15
|
abstract getValue(): L | R;
|
|
16
|
+
abstract getTag(): 'Left' | 'Right';
|
|
11
17
|
abstract assertLeft(): Left<L, R>;
|
|
12
18
|
abstract assertRight(): Right<L, R>;
|
|
13
19
|
abstract match<X>(onLeft: (a: L) => X, onRight: (a: R) => X): X;
|
|
@@ -24,6 +30,7 @@ declare class Left<L, R> extends Either<L, R> {
|
|
|
24
30
|
isRight(): this is Right<L, R>;
|
|
25
31
|
getLeft(): L;
|
|
26
32
|
getValue(): L | R;
|
|
33
|
+
getTag(): 'Left' | 'Right';
|
|
27
34
|
assertLeft(): Left<L, R>;
|
|
28
35
|
assertRight(): Right<L, R>;
|
|
29
36
|
match<X>(onLeft: (a: L) => X, _onRight: (a: R) => X): X;
|
|
@@ -40,6 +47,7 @@ declare class Right<L, R> extends Either<L, R> {
|
|
|
40
47
|
isRight(): this is Right<L, R>;
|
|
41
48
|
getRight(): R;
|
|
42
49
|
getValue(): L | R;
|
|
50
|
+
getTag(): 'Left' | 'Right';
|
|
43
51
|
assertLeft(): Left<L, R>;
|
|
44
52
|
assertRight(): Right<L, R>;
|
|
45
53
|
match<X>(_onLeft: (a: L) => X, onRight: (a: R) => X): X;
|
|
@@ -47,4 +55,4 @@ declare class Right<L, R> extends Either<L, R> {
|
|
|
47
55
|
toMaybe(): Maybe<R>;
|
|
48
56
|
}
|
|
49
57
|
|
|
50
|
-
export { Either, Left, Right };
|
|
58
|
+
export { Either, Left, Right, type 任意Either, type 计算右值们, type 计算左值们 };
|
package/dist/esm/data/either.js
CHANGED
package/dist/esm/data/task.d.ts
CHANGED
package/dist/esm/data/task.js
CHANGED
package/dist/esm/func/seq.d.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { Either } from '../data/either.js';
|
|
2
2
|
import { Maybe } from '../data/maybe.js';
|
|
3
3
|
import { Task } from '../data/task.js';
|
|
4
|
+
import '../types/types.js';
|
|
4
5
|
|
|
5
6
|
declare function seqArrayTask<A>(a: Array<Task<A>>): Task<Array<A>>;
|
|
6
7
|
declare function seqEitherTask<L, R>(value: Either<L, Task<R>>): Task<Either<L, R>>;
|
|
7
8
|
declare function seqEitherArray<A, B>(value: Either<A, Array<B>>): Array<Either<A, B>>;
|
|
8
9
|
declare function seqArrayEitherFirstLeft<A, B>(value: Array<Either<A, B>>): Either<A, Array<B>>;
|
|
10
|
+
declare function seqArrayEitherCollectRight<A, B>(value: Array<Either<A, B>>): Either<A, Array<B>>;
|
|
9
11
|
declare function seqArrayMaybeFirstNothing<X>(a: Array<Maybe<X>>): Maybe<Array<X>>;
|
|
12
|
+
declare function seqArrayMaybeCollectJust<X>(a: Array<Maybe<X>>): Maybe<Array<X>>;
|
|
10
13
|
declare function seqMaybeArray<X>(a: Maybe<Array<X>>): Array<Maybe<X>>;
|
|
11
14
|
declare function seqMaybeTask<X>(a: Maybe<Task<X>>): Task<Maybe<X>>;
|
|
12
15
|
|
|
13
|
-
export { seqArrayEitherFirstLeft, seqArrayMaybeFirstNothing, seqArrayTask, seqEitherArray, seqEitherTask, seqMaybeArray, seqMaybeTask };
|
|
16
|
+
export { seqArrayEitherCollectRight, seqArrayEitherFirstLeft, seqArrayMaybeCollectJust, seqArrayMaybeFirstNothing, seqArrayTask, seqEitherArray, seqEitherTask, seqMaybeArray, seqMaybeTask };
|
package/dist/esm/func/seq.js
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
|
+
seqArrayEitherCollectRight,
|
|
2
3
|
seqArrayEitherFirstLeft,
|
|
4
|
+
seqArrayMaybeCollectJust,
|
|
3
5
|
seqArrayMaybeFirstNothing,
|
|
4
6
|
seqArrayTask,
|
|
5
7
|
seqEitherArray,
|
|
6
8
|
seqEitherTask,
|
|
7
9
|
seqMaybeArray,
|
|
8
10
|
seqMaybeTask
|
|
9
|
-
} from "../chunk-
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
11
|
+
} from "../chunk-IWR6QS6U.js";
|
|
12
|
+
import "../chunk-7HK3EH67.js";
|
|
13
|
+
import "../chunk-MUPBOWCK.js";
|
|
12
14
|
import "../chunk-NXA54GUD.js";
|
|
13
15
|
export {
|
|
16
|
+
seqArrayEitherCollectRight,
|
|
14
17
|
seqArrayEitherFirstLeft,
|
|
18
|
+
seqArrayMaybeCollectJust,
|
|
15
19
|
seqArrayMaybeFirstNothing,
|
|
16
20
|
seqArrayTask,
|
|
17
21
|
seqEitherArray,
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { Either, Left, Right } from './data/either.js';
|
|
1
|
+
export { Either, Left, Right, 任意Either, 计算右值们, 计算左值们 } from './data/either.js';
|
|
2
2
|
export { Lazy, LazyDeferValue, LazyForceValue } from './data/lazy.js';
|
|
3
3
|
export { Just, Maybe, Nothing } from './data/maybe.js';
|
|
4
4
|
export { Task, TaskDo, TaskDoType, TaskDoTypeBase, TaskDoTypeGet, TaskDoTypeIf, TaskDoTypeIfReturn, TaskDoTypeNoGet, TaskDoTypeReturn } from './data/task.js';
|
|
5
|
-
export { seqArrayEitherFirstLeft, seqArrayMaybeFirstNothing, seqArrayTask, seqEitherArray, seqEitherTask, seqMaybeArray, seqMaybeTask } from './func/seq.js';
|
|
5
|
+
export { seqArrayEitherCollectRight, seqArrayEitherFirstLeft, seqArrayMaybeCollectJust, seqArrayMaybeFirstNothing, seqArrayTask, seqEitherArray, seqEitherTask, seqMaybeArray, seqMaybeTask } from './func/seq.js';
|
|
6
|
+
import './types/types.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
LazyDeferValue,
|
|
4
|
-
LazyForceValue
|
|
5
|
-
} from "./chunk-NEBLA4MD.js";
|
|
6
|
-
import {
|
|
2
|
+
seqArrayEitherCollectRight,
|
|
7
3
|
seqArrayEitherFirstLeft,
|
|
4
|
+
seqArrayMaybeCollectJust,
|
|
8
5
|
seqArrayMaybeFirstNothing,
|
|
9
6
|
seqArrayTask,
|
|
10
7
|
seqEitherArray,
|
|
11
8
|
seqEitherTask,
|
|
12
9
|
seqMaybeArray,
|
|
13
10
|
seqMaybeTask
|
|
14
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-IWR6QS6U.js";
|
|
12
|
+
import {
|
|
13
|
+
Lazy,
|
|
14
|
+
LazyDeferValue,
|
|
15
|
+
LazyForceValue
|
|
16
|
+
} from "./chunk-NEBLA4MD.js";
|
|
15
17
|
import {
|
|
16
18
|
Task,
|
|
17
19
|
TaskDo
|
|
18
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-7HK3EH67.js";
|
|
19
21
|
import {
|
|
20
22
|
Either,
|
|
21
23
|
Left,
|
|
22
24
|
Right
|
|
23
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-MUPBOWCK.js";
|
|
24
26
|
import {
|
|
25
27
|
Just,
|
|
26
28
|
Maybe,
|
|
@@ -38,7 +40,9 @@ export {
|
|
|
38
40
|
Right,
|
|
39
41
|
Task,
|
|
40
42
|
TaskDo,
|
|
43
|
+
seqArrayEitherCollectRight,
|
|
41
44
|
seqArrayEitherFirstLeft,
|
|
45
|
+
seqArrayMaybeCollectJust,
|
|
42
46
|
seqArrayMaybeFirstNothing,
|
|
43
47
|
seqArrayTask,
|
|
44
48
|
seqEitherArray,
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lsby/ts-fp-data",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"require": "./dist/cjs/index.cjs",
|
|
@@ -34,5 +34,6 @@
|
|
|
34
34
|
"tsup": "^8.0.2",
|
|
35
35
|
"typescript": "^5.4.5",
|
|
36
36
|
"vitest": "^2.0.2"
|
|
37
|
-
}
|
|
38
|
-
|
|
37
|
+
},
|
|
38
|
+
"packageManager": "pnpm@9.7.1+sha512.faf344af2d6ca65c4c5c8c2224ea77a81a5e8859cbc4e06b1511ddce2f0151512431dd19e6aff31f2c6a8f5f2aced9bd2273e1fed7dd4de1868984059d2c4247"
|
|
39
|
+
}
|