occam-languages 3.0.4 → 3.0.8

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