occam-languages 3.0.5 → 3.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.
@@ -5,37 +5,28 @@ import { arrayUtilities } from "necessary";
5
5
  const { filter: arrayFilter } = arrayUtilities;
6
6
 
7
7
  export function one(array, callback, ...initialArguments) {
8
- const continuation = initialArguments.pop(),
8
+ const forward = initialArguments.pop(),
9
+ back = initialArguments.pop(),
9
10
  length = array.length,
10
11
  index = 0;
11
12
 
12
13
  function next(index, ...nextArguments) {
13
14
  if (index === length) {
14
- const success = (count === 1),
15
- finalArguemnts = success ?
16
- nextArguments : ///
17
- initialArguments; ///
18
-
19
- return continuation(success, ...finalArguemnts);
15
+ return (count === 1) ?
16
+ forward(...nextArguments) :
17
+ back();
20
18
  }
21
19
 
22
20
  const element = array[index];
23
21
 
24
- return callback(element, ...initialArguments, (success, ...callbackArguments) => {
25
- if (success) {
26
- count++;
27
-
28
- if (count === 2) {
29
- const success = false,
30
- finalArguments = initialArguments; ///
31
-
32
- return continuation(success, ...finalArguments);
33
- }
22
+ return callback(element, ...initialArguments, () => next(index + 1, ...nextArguments), (...callbackArguments) => {
23
+ count++;
34
24
 
35
- return next(index + 1, ...callbackArguments);
25
+ if (count === 2) {
26
+ return back();
36
27
  }
37
28
 
38
- return next(index + 1, ...nextArguments);
29
+ return next(index + 1, ...callbackArguments);
39
30
  });
40
31
  }
41
32
 
@@ -45,28 +36,18 @@ export function one(array, callback, ...initialArguments) {
45
36
  }
46
37
 
47
38
  export function some(array, callback, ...initialArguments) {
48
- const continuation = initialArguments.pop(),
39
+ const forward = initialArguments.pop(),
40
+ back = initialArguments.pop(),
49
41
  length = array.length;
50
42
 
51
43
  function next(index) {
52
44
  if (index === length) {
53
- const success = false,
54
- finalArguments = initialArguments; ///
55
-
56
- return continuation(success, ...finalArguments);
45
+ return back();
57
46
  }
58
47
 
59
48
  const element = array[index];
60
49
 
61
- return callback(element, ...initialArguments, (success, ...callbackArguments) => {
62
- if (success) {
63
- const finalArguments = callbackArguments; ///
64
-
65
- return continuation(success, ...finalArguments);
66
- }
67
-
68
- return next(index + 1);
69
- });
50
+ return callback(element, ...initialArguments, () => next(index + 1), forward);
70
51
  }
71
52
 
72
53
  const index = 0;
@@ -75,29 +56,21 @@ export function some(array, callback, ...initialArguments) {
75
56
  }
76
57
 
77
58
  export function each(array, callback, ...initialArguments) {
78
- const continuation = initialArguments.pop(),
59
+ const forward = initialArguments.pop(),
60
+ back = initialArguments.pop(),
79
61
  length = array.length,
80
62
  index = 0;
81
63
 
82
64
  function next(index, ...nextArguments) {
83
65
  if (index === length) {
84
- const success = (count !== 0),
85
- finalArguments = success ?
86
- nextArguments : ///
87
- initialArguments; ///
88
-
89
- return continuation(success, ...finalArguments);
66
+ return (count !== 0) ?
67
+ forward(...nextArguments) :
68
+ back();
90
69
  }
91
70
 
92
71
  const element = array[index];
93
72
 
94
- return callback(element, ...nextArguments, (success, ...callbackArguments) => {
95
- if (!success) {
96
- const finalArguments = initialArguments; ///
97
-
98
- return continuation(success, ...finalArguments);
99
- }
100
-
73
+ return callback(element, ...nextArguments, back, (...callbackArguments) => {
101
74
  count++;
102
75
 
103
76
  return next(index + 1, ...callbackArguments);
@@ -110,27 +83,19 @@ export function each(array, callback, ...initialArguments) {
110
83
  }
111
84
 
112
85
  export function every(array, callback, ...initialArguments) {
113
- const continuation = initialArguments.pop(),
86
+ const forward = initialArguments.pop(),
87
+ back = initialArguments.pop(),
114
88
  length = array.length,
115
89
  index = 0;
116
90
 
117
91
  function next(index, ...nextArguments) {
118
92
  if (index === length) {
119
- const success = true,
120
- finalArguments = nextArguments; ///
121
-
122
- return continuation(success, ...finalArguments);
93
+ return forward(...nextArguments);
123
94
  }
124
95
 
125
96
  const element = array[index];
126
97
 
127
- return callback(element, ...nextArguments, (success, ...callbackArguments) => {
128
- if (!success) {
129
- const finalArguments = initialArguments; ///
130
-
131
- return continuation(success, ...finalArguments);
132
- }
133
-
98
+ return callback(element, ...nextArguments, back, (...callbackArguments) => {
134
99
  return next(index + 1, ...callbackArguments);
135
100
  });
136
101
  }
@@ -139,20 +104,19 @@ export function every(array, callback, ...initialArguments) {
139
104
  }
140
105
 
141
106
  export function reduce(array, initialValue, callback, ...initialArguments) {
142
- const continuation = initialArguments.pop(),
107
+ const forward = initialArguments.pop(),
108
+ back = initialArguments.pop(),
143
109
  length = array.length,
144
110
  index = 0;
145
111
 
146
112
  function next(index, value, ...nextArguments) {
147
113
  if (index === length) {
148
- const finalArguments = nextArguments; ///
149
-
150
- return continuation(value, ...finalArguments);
114
+ return forward(value, ...nextArguments);
151
115
  }
152
116
 
153
117
  const element = array[index];
154
118
 
155
- return callback(element, value, ...nextArguments, (value, ...callbackArguments) => {
119
+ return callback(element, value, ...nextArguments, back, (value, ...callbackArguments) => {
156
120
  return next(index + 1, value, ...callbackArguments);
157
121
  });
158
122
  }
@@ -161,20 +125,19 @@ export function reduce(array, initialValue, callback, ...initialArguments) {
161
125
  }
162
126
 
163
127
  export function forEach(array, callback, ...initialArguments) {
164
- const continuation = initialArguments.pop(),
128
+ const forward = initialArguments.pop(),
129
+ back = initialArguments.pop(),
165
130
  length = array.length,
166
131
  index = 0;
167
132
 
168
133
  function next(index, ...nextArguments) {
169
134
  if (index === length) {
170
- const finalArguments = nextArguments; ///
171
-
172
- return continuation(...finalArguments);
135
+ return forward(...nextArguments);
173
136
  }
174
137
 
175
138
  const element = array[index];
176
139
 
177
- return callback(element, ...nextArguments, (...callbackArguments) => {
140
+ return callback(element, ...nextArguments, back, (...callbackArguments) => {
178
141
  return next(index + 1, ...callbackArguments);
179
142
  });
180
143
  }
@@ -183,27 +146,19 @@ export function forEach(array, callback, ...initialArguments) {
183
146
  }
184
147
 
185
148
  export function forwardsEvery(array, callback, ...initialArguments) {
186
- const continuation = initialArguments.pop(),
149
+ const forward = initialArguments.pop(),
150
+ back = initialArguments.pop(),
187
151
  length = array.length,
188
152
  index = 0;
189
153
 
190
154
  function next(index, ...nextArguments) {
191
155
  if (index === length) {
192
- const success = true,
193
- finalArguments = nextArguments; ///
194
-
195
- return continuation(success, ...finalArguments);
156
+ return forward(...nextArguments);
196
157
  }
197
158
 
198
159
  const element = array[index];
199
160
 
200
- return callback(element, ...nextArguments, (success, ...callbackArguments) => {
201
- if (!success) {
202
- const finalArguments = initialArguments; ///
203
-
204
- return continuation(success, ...finalArguments);
205
- }
206
-
161
+ return callback(element, ...nextArguments, back, (...callbackArguments) => {
207
162
  return next(index + 1, ...callbackArguments);
208
163
  });
209
164
  }
@@ -212,27 +167,19 @@ export function forwardsEvery(array, callback, ...initialArguments) {
212
167
  }
213
168
 
214
169
  export function backwardsEvery(array, callback, ...initialArguments) {
215
- const continuation = initialArguments.pop(),
170
+ const forward = initialArguments.pop(),
171
+ back = initialArguments.pop(),
216
172
  length = array.length,
217
173
  index = length - 1;
218
174
 
219
175
  function next(index, ...nextArguments) {
220
176
  if (index === -1) {
221
- const success = true,
222
- finalArguments = nextArguments; ///
223
-
224
- return continuation(success, ...finalArguments);
177
+ return forward(...nextArguments);
225
178
  }
226
179
 
227
180
  const element = array[index];
228
181
 
229
- return callback(element, ...nextArguments, (success, ...callbackArguments) => {
230
- if (!success) {
231
- const finalArguments = initialArguments; ///
232
-
233
- return continuation(success, ...finalArguments);
234
- }
235
-
182
+ return callback(element, ...nextArguments, back, (...callbackArguments) => {
236
183
  return next(index - 1, ...callbackArguments);
237
184
  });
238
185
  }
@@ -241,20 +188,19 @@ export function backwardsEvery(array, callback, ...initialArguments) {
241
188
  }
242
189
 
243
190
  export function forwardsForEach(array, callback, ...initialArguments) {
244
- const continuation = initialArguments.pop(),
191
+ const forward = initialArguments.pop(),
192
+ back = initialArguments.pop(),
245
193
  length = array.length,
246
194
  index = 0;
247
195
 
248
196
  function next(index, ...nextArguments) {
249
197
  if (index === length) {
250
- const finalArguments = nextArguments; ///
251
-
252
- return continuation(...finalArguments);
198
+ return forward(...nextArguments);
253
199
  }
254
200
 
255
201
  const element = array[index];
256
202
 
257
- return callback(element, ...nextArguments, (...callbackArguments) => {
203
+ return callback(element, ...nextArguments, back, (...callbackArguments) => {
258
204
  return next(index + 1, ...callbackArguments);
259
205
  });
260
206
  }
@@ -263,20 +209,19 @@ export function forwardsForEach(array, callback, ...initialArguments) {
263
209
  }
264
210
 
265
211
  export function backwardsForEach(array, callback, ...initialArguments) {
266
- const continuation = initialArguments.pop(),
212
+ const forward = initialArguments.pop(),
213
+ back = initialArguments.pop(),
267
214
  length = array.length,
268
215
  index = length - 1;
269
216
 
270
217
  function next(index, ...nextArguments) {
271
218
  if (index === -1) {
272
- const finalArguments = nextArguments; ///
273
-
274
- return continuation(...finalArguments);
219
+ return forward(...nextArguments);
275
220
  }
276
221
 
277
222
  const element = array[index];
278
223
 
279
- return callback(element, ...nextArguments, (...callbackArguments) => {
224
+ return callback(element, ...nextArguments, back, (...callbackArguments) => {
280
225
  return next(index - 1, ...callbackArguments);
281
226
  });
282
227
  }
@@ -285,21 +230,20 @@ export function backwardsForEach(array, callback, ...initialArguments) {
285
230
  }
286
231
 
287
232
  export function filter(array, callback, ...initialArguments) {
288
- const continuation = initialArguments.pop(),
233
+ const forward = initialArguments.pop(),
234
+ back = initialArguments.pop(),
289
235
  length = array.length,
290
236
  deletedElements = [],
291
237
  index = length - 1;
292
238
 
293
239
  function next(index, ...nextArguments) {
294
240
  if (index === -1) {
295
- const finalArguments = nextArguments; ///
296
-
297
- return continuation(deletedElements, ...finalArguments);
241
+ return forward(deletedElements, ...nextArguments);
298
242
  }
299
243
 
300
244
  const element = array[index];
301
245
 
302
- return callback(element, ...nextArguments, (passed, ...callbackArguments) => {
246
+ return callback(element, ...nextArguments, back, (passed, ...callbackArguments) => {
303
247
  if (!passed) {
304
248
  const startIndex = index, ///
305
249
  deleteCount = 1,
@@ -318,83 +262,79 @@ export function filter(array, callback, ...initialArguments) {
318
262
  }
319
263
 
320
264
  export function prune(array, callback, ...initialArguments) {
321
- const continuation = initialArguments.pop(),
265
+ const forward = initialArguments.pop(),
266
+ back = initialArguments.pop(),
322
267
  length = array.length,
323
268
  index = 0;
324
269
 
325
- function next(index) {
270
+ function next(index, ...nextArguments) {
326
271
  if (index === length) {
327
- const deletedElement = undefined,
328
- finalArguments = initialArguments; ///
272
+ const deletedElement = undefined;
329
273
 
330
- return continuation(deletedElement, ...finalArguments);
274
+ return forward(deletedElement, ...nextArguments);
331
275
  }
332
276
 
333
277
  const element = array[index];
334
278
 
335
- return callback(element, ...initialArguments, (passed, ...callbackArguments) => {
279
+ return callback(element, ...nextArguments, back, (passed, ...callbackArguments) => {
336
280
  if (!passed) {
337
281
  const startIndex = index, ///
338
282
  deleteCount = 1,
339
- deletedElement = element, ///
340
- finalArguments = callbackArguments; ///
283
+ deletedElement = element; ///
341
284
 
342
285
  array.splice(startIndex, deleteCount);
343
286
 
344
- return continuation(deletedElement, ...finalArguments);
287
+ return forward(deletedElement, ...callbackArguments);
345
288
  }
346
289
 
347
- return next(index + 1);
290
+ return next(index + 1, ...callbackArguments);
348
291
  });
349
292
  }
350
293
 
351
- return next(index);
294
+ return next(index, ...initialArguments);
352
295
  }
353
296
 
354
297
  export function extract(array, callback, ...initialArguments) {
355
- const continuation = initialArguments.pop(),
298
+ const forward = initialArguments.pop(),
299
+ back = initialArguments.pop(),
356
300
  length = array.length,
357
301
  index = 0;
358
302
 
359
- function next(index) {
303
+ function next(index, ...nextArguments) {
360
304
  if (index === length) {
361
- const deletedElement = undefined,
362
- finalArguments = initialArguments; ///
305
+ const deletedElement = undefined;
363
306
 
364
- return continuation(deletedElement, ...finalArguments);
307
+ return forward(deletedElement, ...nextArguments);
365
308
  }
366
309
 
367
310
  const element = array[index];
368
311
 
369
- return callback(element, ...initialArguments, (passed, ...callbackArguments) => {
312
+ return callback(element, ...nextArguments, back, (passed, ...callbackArguments) => {
370
313
  if (passed) {
371
314
  const startIndex = index, ///
372
315
  deleteCount = 1,
373
- deletedElement = element, ///
374
- finalArguments = callbackArguments; ///
316
+ deletedElement = element; ///
375
317
 
376
318
  array.splice(startIndex, deleteCount);
377
319
 
378
- return continuation(deletedElement, ...finalArguments);
320
+ return forward(deletedElement, ...callbackArguments);
379
321
  }
380
322
 
381
- return next(index + 1);
323
+ return next(index + 1, ...callbackArguments);
382
324
  });
383
325
  }
384
326
 
385
- return next(index);
327
+ return next(index, ...initialArguments);
386
328
  }
387
329
 
388
330
  export function match(arrayA, arrayB, callback, ...initialArguments) {
389
- const continuation = initialArguments.pop(),
331
+ const forward = initialArguments.pop(),
332
+ back = initialArguments.pop(),
390
333
  arrayALength = arrayA.length,
391
334
  arrayBLength = arrayB.length;
392
335
 
393
336
  if (arrayALength !== arrayBLength) {
394
- const success = false,
395
- finalArguments = initialArguments; ///
396
-
397
- return continuation(success, ...finalArguments);
337
+ return back();
398
338
  }
399
339
 
400
340
  const length = arrayALength, ///
@@ -402,22 +342,13 @@ export function match(arrayA, arrayB, callback, ...initialArguments) {
402
342
 
403
343
  function next(index, ...nextArguments) {
404
344
  if (index === length) {
405
- const success = true,
406
- finalArguments = nextArguments; ///
407
-
408
- return continuation(success, ...finalArguments);
345
+ return forward(...nextArguments);
409
346
  }
410
347
 
411
348
  const elementA = arrayA[index],
412
349
  elementB = arrayB[index];
413
350
 
414
- return callback(elementA, elementB, ...nextArguments, (success, ...callbackArguments) => {
415
- if (!success) {
416
- const finalArguments = initialArguments; ///
417
-
418
- return continuation(success, ...finalArguments);
419
- }
420
-
351
+ return callback(elementA, elementB, ...nextArguments, back, (...callbackArguments) => {
421
352
  return next(index + 1, ...callbackArguments);
422
353
  });
423
354
  }
@@ -430,24 +361,20 @@ export function resolve(arrayA, arrayB, callback, ...initialArguments) {
430
361
  ...arrayA
431
362
  ];
432
363
 
433
- const continuation = initialArguments.pop();
364
+ const forward = initialArguments.pop(),
365
+ back = initialArguments.pop();
434
366
 
435
367
  function nextPass(...nextArguments) {
436
368
  const length = arrayA.length; ///
437
369
 
438
370
  if (length === 0) {
439
- const success = true,
440
- finalArguments = nextArguments; ///
441
-
442
- return continuation(success, ...finalArguments);
371
+ return forward(...nextArguments);
443
372
  }
444
373
 
445
374
  function nextElement(index, success, ...currentArguments) {
446
375
  if (index === length) {
447
376
  if (!success) {
448
- const finalArguments = initialArguments; ///
449
-
450
- return continuation(success, ...finalArguments);
377
+ return back();
451
378
  }
452
379
 
453
380
  arrayFilter(arrayA, (elementA) => {
@@ -463,18 +390,14 @@ export function resolve(arrayA, arrayB, callback, ...initialArguments) {
463
390
 
464
391
  const elementA = arrayA[index];
465
392
 
466
- return callback(elementA, ...currentArguments, (passed, ...callbackArguments) => {
467
- if (passed) {
468
- const elementB = elementA, ///
469
- success = true;
393
+ return callback(elementA, ...currentArguments, () => nextElement(index + 1, success, ...currentArguments), (...callbackArguments) => {
394
+ const elementB = elementA; ///
470
395
 
471
396
  arrayB.push(elementB);
472
397
 
473
- return nextElement(index + 1, success, ...callbackArguments);
398
+ return nextElement(index + 1, true, ...callbackArguments);
474
399
  }
475
-
476
- return nextElement(index + 1, success, ...currentArguments);
477
- });
400
+ );
478
401
  }
479
402
 
480
403
  const index = 0,