@lsby/ts-fp-data 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -25,6 +25,80 @@ __export(either_exports, {
25
25
  Right: () => Right
26
26
  });
27
27
  module.exports = __toCommonJS(either_exports);
28
+
29
+ // src/data/maybe.ts
30
+ var Maybe = class {
31
+ static pure(a) {
32
+ return new Just(a);
33
+ }
34
+ };
35
+ var Just = class _Just extends Maybe {
36
+ constructor(\u503C) {
37
+ super();
38
+ this.\u503C = \u503C;
39
+ }
40
+ map(f) {
41
+ return new _Just(f(this.\u503C));
42
+ }
43
+ bind(f) {
44
+ return f(this.\u503C);
45
+ }
46
+ isJust() {
47
+ return true;
48
+ }
49
+ isNothing() {
50
+ return false;
51
+ }
52
+ assertJust() {
53
+ return this;
54
+ }
55
+ assertNothing() {
56
+ throw new Error("\u65AD\u8A00\u5931\u8D25");
57
+ }
58
+ getJust() {
59
+ return this.\u503C;
60
+ }
61
+ getJustOrNull() {
62
+ return this.\u503C;
63
+ }
64
+ match(_onNothing, onJust) {
65
+ return onJust(this.\u503C);
66
+ }
67
+ mplus(_a) {
68
+ return this;
69
+ }
70
+ };
71
+ var Nothing = class _Nothing extends Maybe {
72
+ map(_f) {
73
+ return new _Nothing();
74
+ }
75
+ bind(_f) {
76
+ return new _Nothing();
77
+ }
78
+ isJust() {
79
+ return false;
80
+ }
81
+ isNothing() {
82
+ return true;
83
+ }
84
+ assertJust() {
85
+ throw new Error("\u65AD\u8A00\u5931\u8D25");
86
+ }
87
+ assertNothing() {
88
+ return this;
89
+ }
90
+ getJustOrNull() {
91
+ return null;
92
+ }
93
+ match(onNothing, _onJust) {
94
+ return onNothing();
95
+ }
96
+ mplus(a) {
97
+ return a;
98
+ }
99
+ };
100
+
101
+ // src/data/either.ts
28
102
  var Either = class {
29
103
  static pure(a) {
30
104
  return new Right(a);
@@ -65,6 +139,12 @@ var Left = class _Left extends Either {
65
139
  match(onLeft, _onRight) {
66
140
  return onLeft(this.\u503C);
67
141
  }
142
+ mplus(a) {
143
+ return a;
144
+ }
145
+ toMaybe() {
146
+ return new Nothing();
147
+ }
68
148
  };
69
149
  var Right = class _Right extends Either {
70
150
  constructor(\u503C) {
@@ -101,6 +181,12 @@ var Right = class _Right extends Either {
101
181
  match(_onLeft, onRight) {
102
182
  return onRight(this.\u503C);
103
183
  }
184
+ mplus(_a) {
185
+ return this;
186
+ }
187
+ toMaybe() {
188
+ return new Just(this.\u503C);
189
+ }
104
190
  };
105
191
  // Annotate the CommonJS export names for ESM import in node:
106
192
  0 && (module.exports = {
@@ -1,3 +1,5 @@
1
+ import { Maybe } from './maybe.cjs';
2
+
1
3
  declare abstract class Either<L, R> {
2
4
  static pure<L, R>(a: R): Either<L, R>;
3
5
  abstract map<B>(_f: (a: R) => B): Either<L, B>;
@@ -9,6 +11,8 @@ declare abstract class Either<L, R> {
9
11
  abstract assertLeft(): Left<L, R>;
10
12
  abstract assertRight(): Right<L, R>;
11
13
  abstract match<X>(onLeft: (a: L) => X, onRight: (a: R) => X): X;
14
+ abstract mplus(a: Either<L, R>): Either<L, R>;
15
+ abstract toMaybe(): Maybe<R>;
12
16
  }
13
17
  declare class Left<L, R> extends Either<L, R> {
14
18
  private 值;
@@ -23,6 +27,8 @@ declare class Left<L, R> extends Either<L, R> {
23
27
  assertLeft(): Left<L, R>;
24
28
  assertRight(): Right<L, R>;
25
29
  match<X>(onLeft: (a: L) => X, _onRight: (a: R) => X): X;
30
+ mplus(a: Either<L, R>): Either<L, R>;
31
+ toMaybe(): Maybe<R>;
26
32
  }
27
33
  declare class Right<L, R> extends Either<L, R> {
28
34
  private 值;
@@ -37,6 +43,8 @@ declare class Right<L, R> extends Either<L, R> {
37
43
  assertLeft(): Left<L, R>;
38
44
  assertRight(): Right<L, R>;
39
45
  match<X>(_onLeft: (a: L) => X, onRight: (a: R) => X): X;
46
+ mplus(_a: Either<L, R>): Either<L, R>;
47
+ toMaybe(): Maybe<R>;
40
48
  }
41
49
 
42
50
  export { Either, Left, Right };
@@ -59,9 +59,12 @@ var Just = class _Just extends Maybe {
59
59
  getJustOrNull() {
60
60
  return this.\u503C;
61
61
  }
62
- match(onJust, _onNothing) {
62
+ match(_onNothing, onJust) {
63
63
  return onJust(this.\u503C);
64
64
  }
65
+ mplus(_a) {
66
+ return this;
67
+ }
65
68
  };
66
69
  var Nothing = class _Nothing extends Maybe {
67
70
  map(_f) {
@@ -85,9 +88,12 @@ var Nothing = class _Nothing extends Maybe {
85
88
  getJustOrNull() {
86
89
  return null;
87
90
  }
88
- match(_onJust, onNothing) {
91
+ match(onNothing, _onJust) {
89
92
  return onNothing();
90
93
  }
94
+ mplus(a) {
95
+ return a;
96
+ }
91
97
  };
92
98
  // Annotate the CommonJS export names for ESM import in node:
93
99
  0 && (module.exports = {
@@ -5,9 +5,10 @@ declare abstract class Maybe<A> {
5
5
  abstract isJust(): this is Just<A>;
6
6
  abstract isNothing(): this is Nothing<A>;
7
7
  abstract assertJust(): Just<A>;
8
- abstract assertNothing(): Nothing<A>;
8
+ abstract assertNothing(): Nothing<any>;
9
9
  abstract getJustOrNull(): A | null;
10
- abstract match<B>(onJust: (a: A) => B, onNothing: () => B): B;
10
+ abstract match<B>(onNothing: () => B, onJust: (a: A) => B): B;
11
+ abstract mplus(a: Maybe<A>): Maybe<A>;
11
12
  }
12
13
  declare class Just<A> extends Maybe<A> {
13
14
  private 值;
@@ -20,7 +21,8 @@ declare class Just<A> extends Maybe<A> {
20
21
  assertNothing(): Nothing<A>;
21
22
  getJust(): A;
22
23
  getJustOrNull(): A | null;
23
- match<B>(onJust: (a: A) => B, _onNothing: () => B): B;
24
+ match<B>(_onNothing: () => B, onJust: (a: A) => B): B;
25
+ mplus(_a: Maybe<A>): Maybe<A>;
24
26
  }
25
27
  declare class Nothing<A> extends Maybe<A> {
26
28
  map<B>(_f: (a: A) => B): Maybe<B>;
@@ -30,7 +32,8 @@ declare class Nothing<A> extends Maybe<A> {
30
32
  assertJust(): Just<A>;
31
33
  assertNothing(): Nothing<A>;
32
34
  getJustOrNull(): A | null;
33
- match<B>(_onJust: (a: A) => B, onNothing: () => B): B;
35
+ match<B>(onNothing: () => B, _onJust: (a: A) => B): B;
36
+ mplus(a: Maybe<A>): Maybe<A>;
34
37
  }
35
38
 
36
39
  export { Just, Maybe, Nothing };
@@ -25,6 +25,78 @@ __export(task_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(task_exports);
27
27
 
28
+ // src/data/maybe.ts
29
+ var Maybe = class {
30
+ static pure(a) {
31
+ return new Just(a);
32
+ }
33
+ };
34
+ var Just = class _Just extends Maybe {
35
+ constructor(\u503C) {
36
+ super();
37
+ this.\u503C = \u503C;
38
+ }
39
+ map(f) {
40
+ return new _Just(f(this.\u503C));
41
+ }
42
+ bind(f) {
43
+ return f(this.\u503C);
44
+ }
45
+ isJust() {
46
+ return true;
47
+ }
48
+ isNothing() {
49
+ return false;
50
+ }
51
+ assertJust() {
52
+ return this;
53
+ }
54
+ assertNothing() {
55
+ throw new Error("\u65AD\u8A00\u5931\u8D25");
56
+ }
57
+ getJust() {
58
+ return this.\u503C;
59
+ }
60
+ getJustOrNull() {
61
+ return this.\u503C;
62
+ }
63
+ match(_onNothing, onJust) {
64
+ return onJust(this.\u503C);
65
+ }
66
+ mplus(_a) {
67
+ return this;
68
+ }
69
+ };
70
+ var Nothing = class _Nothing extends Maybe {
71
+ map(_f) {
72
+ return new _Nothing();
73
+ }
74
+ bind(_f) {
75
+ return new _Nothing();
76
+ }
77
+ isJust() {
78
+ return false;
79
+ }
80
+ isNothing() {
81
+ return true;
82
+ }
83
+ assertJust() {
84
+ throw new Error("\u65AD\u8A00\u5931\u8D25");
85
+ }
86
+ assertNothing() {
87
+ return this;
88
+ }
89
+ getJustOrNull() {
90
+ return null;
91
+ }
92
+ match(onNothing, _onJust) {
93
+ return onNothing();
94
+ }
95
+ mplus(a) {
96
+ return a;
97
+ }
98
+ };
99
+
28
100
  // src/data/either.ts
29
101
  var Either = class {
30
102
  static pure(a) {
@@ -66,6 +138,12 @@ var Left = class _Left extends Either {
66
138
  match(onLeft, _onRight) {
67
139
  return onLeft(this.\u503C);
68
140
  }
141
+ mplus(a) {
142
+ return a;
143
+ }
144
+ toMaybe() {
145
+ return new Nothing();
146
+ }
69
147
  };
70
148
  var Right = class _Right extends Either {
71
149
  constructor(\u503C) {
@@ -102,6 +180,12 @@ var Right = class _Right extends Either {
102
180
  match(_onLeft, onRight) {
103
181
  return onRight(this.\u503C);
104
182
  }
183
+ mplus(_a) {
184
+ return this;
185
+ }
186
+ toMaybe() {
187
+ return new Just(this.\u503C);
188
+ }
105
189
  };
106
190
 
107
191
  // src/data/task.ts
@@ -1,4 +1,5 @@
1
1
  import { Either } from './either.cjs';
2
+ import './maybe.cjs';
2
3
 
3
4
  type TaskDoTypeBase<Env extends Record<string, any>, A> = {
4
5
  let<K extends string, X>(name: K, task: (env: Env) => X): TaskDoTypeNoGet<Env & Record<K, X>, A>;
@@ -20,15 +20,88 @@ 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
- seqArrayEither: () => seqArrayEither,
23
+ seqArrayEitherFirstLeft: () => seqArrayEitherFirstLeft,
24
+ seqArrayMaybeFirstNothing: () => seqArrayMaybeFirstNothing,
24
25
  seqArrayTask: () => seqArrayTask,
25
26
  seqEitherArray: () => seqEitherArray,
26
- seqEitherPromise: () => seqEitherPromise,
27
27
  seqEitherTask: () => seqEitherTask,
28
- seqMaybePromise: () => seqMaybePromise
28
+ seqMaybeArray: () => seqMaybeArray,
29
+ seqMaybeTask: () => seqMaybeTask
29
30
  });
30
31
  module.exports = __toCommonJS(seq_exports);
31
32
 
33
+ // src/data/maybe.ts
34
+ var Maybe = class {
35
+ static pure(a) {
36
+ return new Just(a);
37
+ }
38
+ };
39
+ var Just = class _Just extends Maybe {
40
+ constructor(\u503C) {
41
+ super();
42
+ this.\u503C = \u503C;
43
+ }
44
+ map(f) {
45
+ return new _Just(f(this.\u503C));
46
+ }
47
+ bind(f) {
48
+ return f(this.\u503C);
49
+ }
50
+ isJust() {
51
+ return true;
52
+ }
53
+ isNothing() {
54
+ return false;
55
+ }
56
+ assertJust() {
57
+ return this;
58
+ }
59
+ assertNothing() {
60
+ throw new Error("\u65AD\u8A00\u5931\u8D25");
61
+ }
62
+ getJust() {
63
+ return this.\u503C;
64
+ }
65
+ getJustOrNull() {
66
+ return this.\u503C;
67
+ }
68
+ match(_onNothing, onJust) {
69
+ return onJust(this.\u503C);
70
+ }
71
+ mplus(_a) {
72
+ return this;
73
+ }
74
+ };
75
+ var Nothing = class _Nothing extends Maybe {
76
+ map(_f) {
77
+ return new _Nothing();
78
+ }
79
+ bind(_f) {
80
+ return new _Nothing();
81
+ }
82
+ isJust() {
83
+ return false;
84
+ }
85
+ isNothing() {
86
+ return true;
87
+ }
88
+ assertJust() {
89
+ throw new Error("\u65AD\u8A00\u5931\u8D25");
90
+ }
91
+ assertNothing() {
92
+ return this;
93
+ }
94
+ getJustOrNull() {
95
+ return null;
96
+ }
97
+ match(onNothing, _onJust) {
98
+ return onNothing();
99
+ }
100
+ mplus(a) {
101
+ return a;
102
+ }
103
+ };
104
+
32
105
  // src/data/either.ts
33
106
  var Either = class {
34
107
  static pure(a) {
@@ -70,6 +143,12 @@ var Left = class _Left extends Either {
70
143
  match(onLeft, _onRight) {
71
144
  return onLeft(this.\u503C);
72
145
  }
146
+ mplus(a) {
147
+ return a;
148
+ }
149
+ toMaybe() {
150
+ return new Nothing();
151
+ }
73
152
  };
74
153
  var Right = class _Right extends Either {
75
154
  constructor(\u503C) {
@@ -106,71 +185,11 @@ var Right = class _Right extends Either {
106
185
  match(_onLeft, onRight) {
107
186
  return onRight(this.\u503C);
108
187
  }
109
- };
110
-
111
- // src/data/maybe.ts
112
- var Maybe = class {
113
- static pure(a) {
114
- return new Just(a);
115
- }
116
- };
117
- var Just = class _Just extends Maybe {
118
- constructor(\u503C) {
119
- super();
120
- this.\u503C = \u503C;
121
- }
122
- map(f) {
123
- return new _Just(f(this.\u503C));
124
- }
125
- bind(f) {
126
- return f(this.\u503C);
127
- }
128
- isJust() {
129
- return true;
130
- }
131
- isNothing() {
132
- return false;
133
- }
134
- assertJust() {
188
+ mplus(_a) {
135
189
  return this;
136
190
  }
137
- assertNothing() {
138
- throw new Error("\u65AD\u8A00\u5931\u8D25");
139
- }
140
- getJust() {
141
- return this.\u503C;
142
- }
143
- getJustOrNull() {
144
- return this.\u503C;
145
- }
146
- match(onJust, _onNothing) {
147
- return onJust(this.\u503C);
148
- }
149
- };
150
- var Nothing = class _Nothing extends Maybe {
151
- map(_f) {
152
- return new _Nothing();
153
- }
154
- bind(_f) {
155
- return new _Nothing();
156
- }
157
- isJust() {
158
- return false;
159
- }
160
- isNothing() {
161
- return true;
162
- }
163
- assertJust() {
164
- throw new Error("\u65AD\u8A00\u5931\u8D25");
165
- }
166
- assertNothing() {
167
- return this;
168
- }
169
- getJustOrNull() {
170
- return null;
171
- }
172
- match(_onJust, onNothing) {
173
- return onNothing();
191
+ toMaybe() {
192
+ return new Just(this.\u503C);
174
193
  }
175
194
  };
176
195
 
@@ -286,31 +305,39 @@ function seqEitherArray(value) {
286
305
  (data) => data.map((a) => new Right(a))
287
306
  );
288
307
  }
289
- function seqArrayEither(value) {
290
- const err = value.filter((a) => a.isLeft())[0];
308
+ function seqArrayEitherFirstLeft(value) {
309
+ var err = value.filter((a) => a.isLeft())[0];
291
310
  if (err)
292
311
  return err;
293
- const data = value.map((a) => a.assertRight().getRight());
312
+ var data = value.map((a) => a.assertRight().getRight());
294
313
  return new Right(data);
295
314
  }
296
- function seqMaybePromise(a) {
315
+ function seqArrayMaybeFirstNothing(a) {
316
+ const firstNothing = a.find((maybe) => maybe.isNothing());
317
+ if (firstNothing)
318
+ return new Nothing();
319
+ const values = a.map((maybe) => maybe.assertJust().getJust());
320
+ return new Just(values);
321
+ }
322
+ function seqMaybeArray(a) {
297
323
  return a.match(
298
- async (a2) => new Just(await a2),
299
- async () => new Nothing()
324
+ () => [new Nothing()],
325
+ (array) => array.map((x) => new Just(x))
300
326
  );
301
327
  }
302
- function seqEitherPromise(a) {
328
+ function seqMaybeTask(a) {
303
329
  return a.match(
304
- async (a2) => new Left(a2),
305
- async (a2) => new Right(await a2)
330
+ () => Task.pure(new Nothing()),
331
+ (task) => task.map((a2) => new Just(a2))
306
332
  );
307
333
  }
308
334
  // Annotate the CommonJS export names for ESM import in node:
309
335
  0 && (module.exports = {
310
- seqArrayEither,
336
+ seqArrayEitherFirstLeft,
337
+ seqArrayMaybeFirstNothing,
311
338
  seqArrayTask,
312
339
  seqEitherArray,
313
- seqEitherPromise,
314
340
  seqEitherTask,
315
- seqMaybePromise
341
+ seqMaybeArray,
342
+ seqMaybeTask
316
343
  });
@@ -5,8 +5,9 @@ import { Task } from '../data/task.cjs';
5
5
  declare function seqArrayTask<A>(a: Array<Task<A>>): Task<Array<A>>;
6
6
  declare function seqEitherTask<L, R>(value: Either<L, Task<R>>): Task<Either<L, R>>;
7
7
  declare function seqEitherArray<A, B>(value: Either<A, Array<B>>): Array<Either<A, B>>;
8
- declare function seqArrayEither<A, B>(value: Array<Either<A, B>>): Either<A, Array<B>>;
9
- declare function seqMaybePromise<A>(a: Maybe<Promise<A>>): Promise<Maybe<A>>;
10
- declare function seqEitherPromise<L, R>(a: Either<L, Promise<R>>): Promise<Either<L, R>>;
8
+ declare function seqArrayEitherFirstLeft<A, B>(value: Array<Either<A, B>>): Either<A, Array<B>>;
9
+ declare function seqArrayMaybeFirstNothing<X>(a: Array<Maybe<X>>): Maybe<Array<X>>;
10
+ declare function seqMaybeArray<X>(a: Maybe<Array<X>>): Array<Maybe<X>>;
11
+ declare function seqMaybeTask<X>(a: Maybe<Task<X>>): Task<Maybe<X>>;
11
12
 
12
- export { seqArrayEither, seqArrayTask, seqEitherArray, seqEitherPromise, seqEitherTask, seqMaybePromise };
13
+ export { seqArrayEitherFirstLeft, seqArrayMaybeFirstNothing, seqArrayTask, seqEitherArray, seqEitherTask, seqMaybeArray, seqMaybeTask };
@@ -31,15 +31,88 @@ __export(src_exports, {
31
31
  Right: () => Right,
32
32
  Task: () => Task,
33
33
  TaskDo: () => TaskDo,
34
- seqArrayEither: () => seqArrayEither,
34
+ seqArrayEitherFirstLeft: () => seqArrayEitherFirstLeft,
35
+ seqArrayMaybeFirstNothing: () => seqArrayMaybeFirstNothing,
35
36
  seqArrayTask: () => seqArrayTask,
36
37
  seqEitherArray: () => seqEitherArray,
37
- seqEitherPromise: () => seqEitherPromise,
38
38
  seqEitherTask: () => seqEitherTask,
39
- seqMaybePromise: () => seqMaybePromise
39
+ seqMaybeArray: () => seqMaybeArray,
40
+ seqMaybeTask: () => seqMaybeTask
40
41
  });
41
42
  module.exports = __toCommonJS(src_exports);
42
43
 
44
+ // src/data/maybe.ts
45
+ var Maybe = class {
46
+ static pure(a) {
47
+ return new Just(a);
48
+ }
49
+ };
50
+ var Just = class _Just extends Maybe {
51
+ constructor(\u503C) {
52
+ super();
53
+ this.\u503C = \u503C;
54
+ }
55
+ map(f) {
56
+ return new _Just(f(this.\u503C));
57
+ }
58
+ bind(f) {
59
+ return f(this.\u503C);
60
+ }
61
+ isJust() {
62
+ return true;
63
+ }
64
+ isNothing() {
65
+ return false;
66
+ }
67
+ assertJust() {
68
+ return this;
69
+ }
70
+ assertNothing() {
71
+ throw new Error("\u65AD\u8A00\u5931\u8D25");
72
+ }
73
+ getJust() {
74
+ return this.\u503C;
75
+ }
76
+ getJustOrNull() {
77
+ return this.\u503C;
78
+ }
79
+ match(_onNothing, onJust) {
80
+ return onJust(this.\u503C);
81
+ }
82
+ mplus(_a) {
83
+ return this;
84
+ }
85
+ };
86
+ var Nothing = class _Nothing extends Maybe {
87
+ map(_f) {
88
+ return new _Nothing();
89
+ }
90
+ bind(_f) {
91
+ return new _Nothing();
92
+ }
93
+ isJust() {
94
+ return false;
95
+ }
96
+ isNothing() {
97
+ return true;
98
+ }
99
+ assertJust() {
100
+ throw new Error("\u65AD\u8A00\u5931\u8D25");
101
+ }
102
+ assertNothing() {
103
+ return this;
104
+ }
105
+ getJustOrNull() {
106
+ return null;
107
+ }
108
+ match(onNothing, _onJust) {
109
+ return onNothing();
110
+ }
111
+ mplus(a) {
112
+ return a;
113
+ }
114
+ };
115
+
43
116
  // src/data/either.ts
44
117
  var Either = class {
45
118
  static pure(a) {
@@ -81,6 +154,12 @@ var Left = class _Left extends Either {
81
154
  match(onLeft, _onRight) {
82
155
  return onLeft(this.\u503C);
83
156
  }
157
+ mplus(a) {
158
+ return a;
159
+ }
160
+ toMaybe() {
161
+ return new Nothing();
162
+ }
84
163
  };
85
164
  var Right = class _Right extends Either {
86
165
  constructor(\u503C) {
@@ -117,6 +196,12 @@ var Right = class _Right extends Either {
117
196
  match(_onLeft, onRight) {
118
197
  return onRight(this.\u503C);
119
198
  }
199
+ mplus(_a) {
200
+ return this;
201
+ }
202
+ toMaybe() {
203
+ return new Just(this.\u503C);
204
+ }
120
205
  };
121
206
 
122
207
  // src/data/lazy.ts
@@ -151,72 +236,6 @@ var LazyForceValue = class _LazyForceValue extends Lazy {
151
236
  }
152
237
  };
153
238
 
154
- // src/data/maybe.ts
155
- var Maybe = class {
156
- static pure(a) {
157
- return new Just(a);
158
- }
159
- };
160
- var Just = class _Just extends Maybe {
161
- constructor(\u503C) {
162
- super();
163
- this.\u503C = \u503C;
164
- }
165
- map(f) {
166
- return new _Just(f(this.\u503C));
167
- }
168
- bind(f) {
169
- return f(this.\u503C);
170
- }
171
- isJust() {
172
- return true;
173
- }
174
- isNothing() {
175
- return false;
176
- }
177
- assertJust() {
178
- return this;
179
- }
180
- assertNothing() {
181
- throw new Error("\u65AD\u8A00\u5931\u8D25");
182
- }
183
- getJust() {
184
- return this.\u503C;
185
- }
186
- getJustOrNull() {
187
- return this.\u503C;
188
- }
189
- match(onJust, _onNothing) {
190
- return onJust(this.\u503C);
191
- }
192
- };
193
- var Nothing = class _Nothing extends Maybe {
194
- map(_f) {
195
- return new _Nothing();
196
- }
197
- bind(_f) {
198
- return new _Nothing();
199
- }
200
- isJust() {
201
- return false;
202
- }
203
- isNothing() {
204
- return true;
205
- }
206
- assertJust() {
207
- throw new Error("\u65AD\u8A00\u5931\u8D25");
208
- }
209
- assertNothing() {
210
- return this;
211
- }
212
- getJustOrNull() {
213
- return null;
214
- }
215
- match(_onJust, onNothing) {
216
- return onNothing();
217
- }
218
- };
219
-
220
239
  // src/data/task.ts
221
240
  var TaskDo = class _TaskDo {
222
241
  constructor(accTask) {
@@ -329,23 +348,30 @@ function seqEitherArray(value) {
329
348
  (data) => data.map((a) => new Right(a))
330
349
  );
331
350
  }
332
- function seqArrayEither(value) {
333
- const err = value.filter((a) => a.isLeft())[0];
351
+ function seqArrayEitherFirstLeft(value) {
352
+ var err = value.filter((a) => a.isLeft())[0];
334
353
  if (err)
335
354
  return err;
336
- const data = value.map((a) => a.assertRight().getRight());
355
+ var data = value.map((a) => a.assertRight().getRight());
337
356
  return new Right(data);
338
357
  }
339
- function seqMaybePromise(a) {
358
+ function seqArrayMaybeFirstNothing(a) {
359
+ const firstNothing = a.find((maybe) => maybe.isNothing());
360
+ if (firstNothing)
361
+ return new Nothing();
362
+ const values = a.map((maybe) => maybe.assertJust().getJust());
363
+ return new Just(values);
364
+ }
365
+ function seqMaybeArray(a) {
340
366
  return a.match(
341
- async (a2) => new Just(await a2),
342
- async () => new Nothing()
367
+ () => [new Nothing()],
368
+ (array) => array.map((x) => new Just(x))
343
369
  );
344
370
  }
345
- function seqEitherPromise(a) {
371
+ function seqMaybeTask(a) {
346
372
  return a.match(
347
- async (a2) => new Left(a2),
348
- async (a2) => new Right(await a2)
373
+ () => Task.pure(new Nothing()),
374
+ (task) => task.map((a2) => new Just(a2))
349
375
  );
350
376
  }
351
377
  // Annotate the CommonJS export names for ESM import in node:
@@ -361,10 +387,11 @@ function seqEitherPromise(a) {
361
387
  Right,
362
388
  Task,
363
389
  TaskDo,
364
- seqArrayEither,
390
+ seqArrayEitherFirstLeft,
391
+ seqArrayMaybeFirstNothing,
365
392
  seqArrayTask,
366
393
  seqEitherArray,
367
- seqEitherPromise,
368
394
  seqEitherTask,
369
- seqMaybePromise
395
+ seqMaybeArray,
396
+ seqMaybeTask
370
397
  });
@@ -2,4 +2,4 @@ export { Either, Left, Right } 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 { seqArrayEither, seqArrayTask, seqEitherArray, seqEitherPromise, seqEitherTask, seqMaybePromise } from './func/seq.cjs';
5
+ export { seqArrayEitherFirstLeft, seqArrayMaybeFirstNothing, seqArrayTask, seqEitherArray, seqEitherTask, seqMaybeArray, seqMaybeTask } from './func/seq.cjs';
@@ -1,3 +1,8 @@
1
+ import {
2
+ Just,
3
+ Nothing
4
+ } from "./chunk-NXA54GUD.js";
5
+
1
6
  // src/data/either.ts
2
7
  var Either = class {
3
8
  static pure(a) {
@@ -39,6 +44,12 @@ var Left = class _Left extends Either {
39
44
  match(onLeft, _onRight) {
40
45
  return onLeft(this.\u503C);
41
46
  }
47
+ mplus(a) {
48
+ return a;
49
+ }
50
+ toMaybe() {
51
+ return new Nothing();
52
+ }
42
53
  };
43
54
  var Right = class _Right extends Either {
44
55
  constructor(\u503C) {
@@ -75,6 +86,12 @@ var Right = class _Right extends Either {
75
86
  match(_onLeft, onRight) {
76
87
  return onRight(this.\u503C);
77
88
  }
89
+ mplus(_a) {
90
+ return this;
91
+ }
92
+ toMaybe() {
93
+ return new Just(this.\u503C);
94
+ }
78
95
  };
79
96
 
80
97
  export {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Left,
3
3
  Right
4
- } from "./chunk-VTI5CRVQ.js";
4
+ } from "./chunk-BE7V6GBG.js";
5
5
 
6
6
  // src/data/task.ts
7
7
  var TaskDo = class _TaskDo {
@@ -33,9 +33,12 @@ var Just = class _Just extends Maybe {
33
33
  getJustOrNull() {
34
34
  return this.\u503C;
35
35
  }
36
- match(onJust, _onNothing) {
36
+ match(_onNothing, onJust) {
37
37
  return onJust(this.\u503C);
38
38
  }
39
+ mplus(_a) {
40
+ return this;
41
+ }
39
42
  };
40
43
  var Nothing = class _Nothing extends Maybe {
41
44
  map(_f) {
@@ -59,9 +62,12 @@ var Nothing = class _Nothing extends Maybe {
59
62
  getJustOrNull() {
60
63
  return null;
61
64
  }
62
- match(_onJust, onNothing) {
65
+ match(onNothing, _onJust) {
63
66
  return onNothing();
64
67
  }
68
+ mplus(a) {
69
+ return a;
70
+ }
65
71
  };
66
72
 
67
73
  export {
@@ -0,0 +1,66 @@
1
+ import {
2
+ Task
3
+ } from "./chunk-IB4BVSOW.js";
4
+ import {
5
+ Left,
6
+ Right
7
+ } from "./chunk-BE7V6GBG.js";
8
+ import {
9
+ Just,
10
+ Nothing
11
+ } from "./chunk-NXA54GUD.js";
12
+
13
+ // src/func/seq.ts
14
+ function seqArrayTask(a) {
15
+ return new Task(async () => {
16
+ return Promise.all(a.map(async (a2) => await a2.run()));
17
+ });
18
+ }
19
+ function seqEitherTask(value) {
20
+ return value.match(
21
+ (err) => Task.pure(new Left(err)),
22
+ (data) => data.map((a) => new Right(a))
23
+ );
24
+ }
25
+ function seqEitherArray(value) {
26
+ return value.match(
27
+ (err) => [new Left(err)],
28
+ (data) => data.map((a) => new Right(a))
29
+ );
30
+ }
31
+ function seqArrayEitherFirstLeft(value) {
32
+ var err = value.filter((a) => a.isLeft())[0];
33
+ if (err)
34
+ return err;
35
+ var data = value.map((a) => a.assertRight().getRight());
36
+ return new Right(data);
37
+ }
38
+ function seqArrayMaybeFirstNothing(a) {
39
+ const firstNothing = a.find((maybe) => maybe.isNothing());
40
+ if (firstNothing)
41
+ return new Nothing();
42
+ const values = a.map((maybe) => maybe.assertJust().getJust());
43
+ return new Just(values);
44
+ }
45
+ function seqMaybeArray(a) {
46
+ return a.match(
47
+ () => [new Nothing()],
48
+ (array) => array.map((x) => new Just(x))
49
+ );
50
+ }
51
+ function seqMaybeTask(a) {
52
+ return a.match(
53
+ () => Task.pure(new Nothing()),
54
+ (task) => task.map((a2) => new Just(a2))
55
+ );
56
+ }
57
+
58
+ export {
59
+ seqArrayTask,
60
+ seqEitherTask,
61
+ seqEitherArray,
62
+ seqArrayEitherFirstLeft,
63
+ seqArrayMaybeFirstNothing,
64
+ seqMaybeArray,
65
+ seqMaybeTask
66
+ };
@@ -1,3 +1,5 @@
1
+ import { Maybe } from './maybe.js';
2
+
1
3
  declare abstract class Either<L, R> {
2
4
  static pure<L, R>(a: R): Either<L, R>;
3
5
  abstract map<B>(_f: (a: R) => B): Either<L, B>;
@@ -9,6 +11,8 @@ declare abstract class Either<L, R> {
9
11
  abstract assertLeft(): Left<L, R>;
10
12
  abstract assertRight(): Right<L, R>;
11
13
  abstract match<X>(onLeft: (a: L) => X, onRight: (a: R) => X): X;
14
+ abstract mplus(a: Either<L, R>): Either<L, R>;
15
+ abstract toMaybe(): Maybe<R>;
12
16
  }
13
17
  declare class Left<L, R> extends Either<L, R> {
14
18
  private 值;
@@ -23,6 +27,8 @@ declare class Left<L, R> extends Either<L, R> {
23
27
  assertLeft(): Left<L, R>;
24
28
  assertRight(): Right<L, R>;
25
29
  match<X>(onLeft: (a: L) => X, _onRight: (a: R) => X): X;
30
+ mplus(a: Either<L, R>): Either<L, R>;
31
+ toMaybe(): Maybe<R>;
26
32
  }
27
33
  declare class Right<L, R> extends Either<L, R> {
28
34
  private 值;
@@ -37,6 +43,8 @@ declare class Right<L, R> extends Either<L, R> {
37
43
  assertLeft(): Left<L, R>;
38
44
  assertRight(): Right<L, R>;
39
45
  match<X>(_onLeft: (a: L) => X, onRight: (a: R) => X): X;
46
+ mplus(_a: Either<L, R>): Either<L, R>;
47
+ toMaybe(): Maybe<R>;
40
48
  }
41
49
 
42
50
  export { Either, Left, Right };
@@ -2,7 +2,8 @@ import {
2
2
  Either,
3
3
  Left,
4
4
  Right
5
- } from "../chunk-VTI5CRVQ.js";
5
+ } from "../chunk-BE7V6GBG.js";
6
+ import "../chunk-NXA54GUD.js";
6
7
  export {
7
8
  Either,
8
9
  Left,
@@ -5,9 +5,10 @@ declare abstract class Maybe<A> {
5
5
  abstract isJust(): this is Just<A>;
6
6
  abstract isNothing(): this is Nothing<A>;
7
7
  abstract assertJust(): Just<A>;
8
- abstract assertNothing(): Nothing<A>;
8
+ abstract assertNothing(): Nothing<any>;
9
9
  abstract getJustOrNull(): A | null;
10
- abstract match<B>(onJust: (a: A) => B, onNothing: () => B): B;
10
+ abstract match<B>(onNothing: () => B, onJust: (a: A) => B): B;
11
+ abstract mplus(a: Maybe<A>): Maybe<A>;
11
12
  }
12
13
  declare class Just<A> extends Maybe<A> {
13
14
  private 值;
@@ -20,7 +21,8 @@ declare class Just<A> extends Maybe<A> {
20
21
  assertNothing(): Nothing<A>;
21
22
  getJust(): A;
22
23
  getJustOrNull(): A | null;
23
- match<B>(onJust: (a: A) => B, _onNothing: () => B): B;
24
+ match<B>(_onNothing: () => B, onJust: (a: A) => B): B;
25
+ mplus(_a: Maybe<A>): Maybe<A>;
24
26
  }
25
27
  declare class Nothing<A> extends Maybe<A> {
26
28
  map<B>(_f: (a: A) => B): Maybe<B>;
@@ -30,7 +32,8 @@ declare class Nothing<A> extends Maybe<A> {
30
32
  assertJust(): Just<A>;
31
33
  assertNothing(): Nothing<A>;
32
34
  getJustOrNull(): A | null;
33
- match<B>(_onJust: (a: A) => B, onNothing: () => B): B;
35
+ match<B>(onNothing: () => B, _onJust: (a: A) => B): B;
36
+ mplus(a: Maybe<A>): Maybe<A>;
34
37
  }
35
38
 
36
39
  export { Just, Maybe, Nothing };
@@ -2,7 +2,7 @@ import {
2
2
  Just,
3
3
  Maybe,
4
4
  Nothing
5
- } from "../chunk-CQG32QQC.js";
5
+ } from "../chunk-NXA54GUD.js";
6
6
  export {
7
7
  Just,
8
8
  Maybe,
@@ -1,4 +1,5 @@
1
1
  import { Either } from './either.js';
2
+ import './maybe.js';
2
3
 
3
4
  type TaskDoTypeBase<Env extends Record<string, any>, A> = {
4
5
  let<K extends string, X>(name: K, task: (env: Env) => X): TaskDoTypeNoGet<Env & Record<K, X>, A>;
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  Task,
3
3
  TaskDo
4
- } from "../chunk-OYLE35IQ.js";
5
- import "../chunk-VTI5CRVQ.js";
4
+ } from "../chunk-IB4BVSOW.js";
5
+ import "../chunk-BE7V6GBG.js";
6
+ import "../chunk-NXA54GUD.js";
6
7
  export {
7
8
  Task,
8
9
  TaskDo
@@ -5,8 +5,9 @@ import { Task } from '../data/task.js';
5
5
  declare function seqArrayTask<A>(a: Array<Task<A>>): Task<Array<A>>;
6
6
  declare function seqEitherTask<L, R>(value: Either<L, Task<R>>): Task<Either<L, R>>;
7
7
  declare function seqEitherArray<A, B>(value: Either<A, Array<B>>): Array<Either<A, B>>;
8
- declare function seqArrayEither<A, B>(value: Array<Either<A, B>>): Either<A, Array<B>>;
9
- declare function seqMaybePromise<A>(a: Maybe<Promise<A>>): Promise<Maybe<A>>;
10
- declare function seqEitherPromise<L, R>(a: Either<L, Promise<R>>): Promise<Either<L, R>>;
8
+ declare function seqArrayEitherFirstLeft<A, B>(value: Array<Either<A, B>>): Either<A, Array<B>>;
9
+ declare function seqArrayMaybeFirstNothing<X>(a: Array<Maybe<X>>): Maybe<Array<X>>;
10
+ declare function seqMaybeArray<X>(a: Maybe<Array<X>>): Array<Maybe<X>>;
11
+ declare function seqMaybeTask<X>(a: Maybe<Task<X>>): Task<Maybe<X>>;
11
12
 
12
- export { seqArrayEither, seqArrayTask, seqEitherArray, seqEitherPromise, seqEitherTask, seqMaybePromise };
13
+ export { seqArrayEitherFirstLeft, seqArrayMaybeFirstNothing, seqArrayTask, seqEitherArray, seqEitherTask, seqMaybeArray, seqMaybeTask };
@@ -1,19 +1,21 @@
1
1
  import {
2
- seqArrayEither,
2
+ seqArrayEitherFirstLeft,
3
+ seqArrayMaybeFirstNothing,
3
4
  seqArrayTask,
4
5
  seqEitherArray,
5
- seqEitherPromise,
6
6
  seqEitherTask,
7
- seqMaybePromise
8
- } from "../chunk-UQKW2A3C.js";
9
- import "../chunk-CQG32QQC.js";
10
- import "../chunk-OYLE35IQ.js";
11
- import "../chunk-VTI5CRVQ.js";
7
+ seqMaybeArray,
8
+ seqMaybeTask
9
+ } from "../chunk-UTZJVGHH.js";
10
+ import "../chunk-IB4BVSOW.js";
11
+ import "../chunk-BE7V6GBG.js";
12
+ import "../chunk-NXA54GUD.js";
12
13
  export {
13
- seqArrayEither,
14
+ seqArrayEitherFirstLeft,
15
+ seqArrayMaybeFirstNothing,
14
16
  seqArrayTask,
15
17
  seqEitherArray,
16
- seqEitherPromise,
17
18
  seqEitherTask,
18
- seqMaybePromise
19
+ seqMaybeArray,
20
+ seqMaybeTask
19
21
  };
@@ -2,4 +2,4 @@ export { Either, Left, Right } 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 { seqArrayEither, seqArrayTask, seqEitherArray, seqEitherPromise, seqEitherTask, seqMaybePromise } from './func/seq.js';
5
+ export { seqArrayEitherFirstLeft, seqArrayMaybeFirstNothing, seqArrayTask, seqEitherArray, seqEitherTask, seqMaybeArray, seqMaybeTask } from './func/seq.js';
package/dist/esm/index.js CHANGED
@@ -4,27 +4,28 @@ import {
4
4
  LazyForceValue
5
5
  } from "./chunk-NEBLA4MD.js";
6
6
  import {
7
- seqArrayEither,
7
+ seqArrayEitherFirstLeft,
8
+ seqArrayMaybeFirstNothing,
8
9
  seqArrayTask,
9
10
  seqEitherArray,
10
- seqEitherPromise,
11
11
  seqEitherTask,
12
- seqMaybePromise
13
- } from "./chunk-UQKW2A3C.js";
14
- import {
15
- Just,
16
- Maybe,
17
- Nothing
18
- } from "./chunk-CQG32QQC.js";
12
+ seqMaybeArray,
13
+ seqMaybeTask
14
+ } from "./chunk-UTZJVGHH.js";
19
15
  import {
20
16
  Task,
21
17
  TaskDo
22
- } from "./chunk-OYLE35IQ.js";
18
+ } from "./chunk-IB4BVSOW.js";
23
19
  import {
24
20
  Either,
25
21
  Left,
26
22
  Right
27
- } from "./chunk-VTI5CRVQ.js";
23
+ } from "./chunk-BE7V6GBG.js";
24
+ import {
25
+ Just,
26
+ Maybe,
27
+ Nothing
28
+ } from "./chunk-NXA54GUD.js";
28
29
  export {
29
30
  Either,
30
31
  Just,
@@ -37,10 +38,11 @@ export {
37
38
  Right,
38
39
  Task,
39
40
  TaskDo,
40
- seqArrayEither,
41
+ seqArrayEitherFirstLeft,
42
+ seqArrayMaybeFirstNothing,
41
43
  seqArrayTask,
42
44
  seqEitherArray,
43
- seqEitherPromise,
44
45
  seqEitherTask,
45
- seqMaybePromise
46
+ seqMaybeArray,
47
+ seqMaybeTask
46
48
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lsby/ts-fp-data",
3
- "version": "0.1.4",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "require": "./dist/cjs/index.cjs",
@@ -1,58 +0,0 @@
1
- import {
2
- Just,
3
- Nothing
4
- } from "./chunk-CQG32QQC.js";
5
- import {
6
- Task
7
- } from "./chunk-OYLE35IQ.js";
8
- import {
9
- Left,
10
- Right
11
- } from "./chunk-VTI5CRVQ.js";
12
-
13
- // src/func/seq.ts
14
- function seqArrayTask(a) {
15
- return new Task(async () => {
16
- return Promise.all(a.map(async (a2) => await a2.run()));
17
- });
18
- }
19
- function seqEitherTask(value) {
20
- return value.match(
21
- (err) => Task.pure(new Left(err)),
22
- (data) => data.map((a) => new Right(a))
23
- );
24
- }
25
- function seqEitherArray(value) {
26
- return value.match(
27
- (err) => [new Left(err)],
28
- (data) => data.map((a) => new Right(a))
29
- );
30
- }
31
- function seqArrayEither(value) {
32
- const err = value.filter((a) => a.isLeft())[0];
33
- if (err)
34
- return err;
35
- const data = value.map((a) => a.assertRight().getRight());
36
- return new Right(data);
37
- }
38
- function seqMaybePromise(a) {
39
- return a.match(
40
- async (a2) => new Just(await a2),
41
- async () => new Nothing()
42
- );
43
- }
44
- function seqEitherPromise(a) {
45
- return a.match(
46
- async (a2) => new Left(a2),
47
- async (a2) => new Right(await a2)
48
- );
49
- }
50
-
51
- export {
52
- seqArrayTask,
53
- seqEitherTask,
54
- seqEitherArray,
55
- seqArrayEither,
56
- seqMaybePromise,
57
- seqEitherPromise
58
- };