@grain/stdlib 0.5.2 → 0.5.4
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/CHANGELOG.md +59 -0
- package/array.gr +61 -1
- package/array.md +113 -0
- package/bigint.md +30 -30
- package/buffer.gr +24 -22
- package/char.gr +2 -2
- package/float32.md +3 -3
- package/float64.md +3 -3
- package/immutablemap.gr +493 -0
- package/immutablemap.md +479 -0
- package/immutablepriorityqueue.gr +360 -0
- package/immutablepriorityqueue.md +291 -0
- package/immutableset.gr +498 -0
- package/immutableset.md +449 -0
- package/list.gr +75 -2
- package/list.md +110 -0
- package/map.gr +1 -2
- package/marshal.gr +1058 -0
- package/marshal.md +76 -0
- package/number.gr +689 -23
- package/number.md +362 -27
- package/package.json +1 -1
- package/pervasives.gr +16 -5
- package/pervasives.md +28 -0
- package/priorityqueue.gr +261 -0
- package/priorityqueue.md +309 -0
- package/queue.gr +14 -1
- package/queue.md +16 -1
- package/regex.gr +90 -67
- package/runtime/bigint.gr +4 -4
- package/runtime/compare.gr +179 -0
- package/runtime/compare.md +6 -0
- package/runtime/equal.gr +3 -3
- package/runtime/exception.gr +9 -5
- package/runtime/exception.md +8 -2
- package/runtime/gc.gr +2 -1
- package/runtime/malloc.gr +1 -3
- package/runtime/numberUtils.gr +11 -11
- package/runtime/numbers.gr +423 -100
- package/runtime/numbers.md +50 -0
- package/runtime/string.gr +4 -2
- package/set.gr +26 -27
- package/stack.gr +12 -0
- package/stack.md +15 -0
- package/string.gr +409 -53
- package/string.md +164 -1
- package/sys/file.gr +4 -4
- package/sys/file.md +3 -3
- package/sys/process.gr +3 -3
- package/sys/process.md +3 -3
- package/sys/random.gr +2 -2
- package/sys/random.md +2 -2
- package/sys/time.gr +2 -2
- package/sys/time.md +2 -2
package/runtime/numbers.md
CHANGED
|
@@ -10,6 +10,18 @@ isBoxedNumber : WasmI32 -> Bool
|
|
|
10
10
|
isFloat : WasmI32 -> Bool
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
+
### Numbers.**isInteger**
|
|
14
|
+
|
|
15
|
+
```grain
|
|
16
|
+
isInteger : WasmI32 -> Bool
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Numbers.**isRational**
|
|
20
|
+
|
|
21
|
+
```grain
|
|
22
|
+
isRational : WasmI32 -> Bool
|
|
23
|
+
```
|
|
24
|
+
|
|
13
25
|
### Numbers.**isNumber**
|
|
14
26
|
|
|
15
27
|
```grain
|
|
@@ -94,6 +106,12 @@ coerceNumberToWasmI32 : Number -> WasmI32
|
|
|
94
106
|
numberEqual : (WasmI32, WasmI32) -> Bool
|
|
95
107
|
```
|
|
96
108
|
|
|
109
|
+
### Numbers.**cmp**
|
|
110
|
+
|
|
111
|
+
```grain
|
|
112
|
+
cmp : (WasmI32, WasmI32, Bool) -> WasmI32
|
|
113
|
+
```
|
|
114
|
+
|
|
97
115
|
### Numbers.**(<)**
|
|
98
116
|
|
|
99
117
|
```grain
|
|
@@ -118,6 +136,12 @@ numberEqual : (WasmI32, WasmI32) -> Bool
|
|
|
118
136
|
(>=) : (Number, Number) -> Bool
|
|
119
137
|
```
|
|
120
138
|
|
|
139
|
+
### Numbers.**compare**
|
|
140
|
+
|
|
141
|
+
```grain
|
|
142
|
+
compare : (Number, Number) -> Number
|
|
143
|
+
```
|
|
144
|
+
|
|
121
145
|
### Numbers.**numberEq**
|
|
122
146
|
|
|
123
147
|
```grain
|
|
@@ -298,3 +322,29 @@ decr : Number -> Number
|
|
|
298
322
|
isBigInt : a -> Bool
|
|
299
323
|
```
|
|
300
324
|
|
|
325
|
+
### Numbers.**scalbn**
|
|
326
|
+
|
|
327
|
+
<details disabled>
|
|
328
|
+
<summary tabindex="-1">Added in <code>0.5.4</code></summary>
|
|
329
|
+
No other changes yet.
|
|
330
|
+
</details>
|
|
331
|
+
|
|
332
|
+
```grain
|
|
333
|
+
scalbn : (WasmF64, WasmI32) -> WasmF64
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
Multiplies a floating-point number by an integral power of 2.
|
|
337
|
+
|
|
338
|
+
Parameters:
|
|
339
|
+
|
|
340
|
+
|param|type|description|
|
|
341
|
+
|-----|----|-----------|
|
|
342
|
+
|`x`|`WasmF64`|The floating-point value|
|
|
343
|
+
|`n`|`WasmI32`|The Integer exponent|
|
|
344
|
+
|
|
345
|
+
Returns:
|
|
346
|
+
|
|
347
|
+
|type|description|
|
|
348
|
+
|----|-----------|
|
|
349
|
+
|`WasmF64`|The result of x * 2^n|
|
|
350
|
+
|
package/runtime/string.gr
CHANGED
|
@@ -547,7 +547,8 @@ let rec heapValueToString = (ptr, extraIndents, toplevel) => {
|
|
|
547
547
|
join(strings)
|
|
548
548
|
},
|
|
549
549
|
}
|
|
550
|
-
},
|
|
550
|
+
},
|
|
551
|
+
toStringHelp = (grainValue, extraIndents, toplevel) => {
|
|
551
552
|
if ((grainValue & 1n) != 0n) {
|
|
552
553
|
// Simple (unboxed) numbers
|
|
553
554
|
NumberUtils.itoa32(grainValue >> 1n, 10n)
|
|
@@ -572,7 +573,8 @@ let rec heapValueToString = (ptr, extraIndents, toplevel) => {
|
|
|
572
573
|
"<unknown value>"
|
|
573
574
|
}
|
|
574
575
|
}
|
|
575
|
-
},
|
|
576
|
+
},
|
|
577
|
+
listToString = (ptr, extraIndents) => {
|
|
576
578
|
let mut cur = ptr
|
|
577
579
|
let mut isFirst = true
|
|
578
580
|
|
package/set.gr
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module Set: A Set is an unordered collection of unique values. Operations on a Set mutate the internal state, so it never needs to be re-assigned.
|
|
3
3
|
* @example import Set from "set"
|
|
4
4
|
*
|
|
5
|
-
* @since
|
|
5
|
+
* @since v0.3.0
|
|
6
6
|
*/
|
|
7
7
|
import List from "list"
|
|
8
8
|
import Array from "array"
|
|
@@ -33,7 +33,7 @@ record Set<k> {
|
|
|
33
33
|
* @param size: The initial storage size of the set
|
|
34
34
|
* @returns An empty set with the given initial storage size
|
|
35
35
|
*
|
|
36
|
-
* @since
|
|
36
|
+
* @since v0.3.0
|
|
37
37
|
*/
|
|
38
38
|
export let makeSized = size => {
|
|
39
39
|
let buckets = Array.make(size, None)
|
|
@@ -44,7 +44,7 @@ export let makeSized = size => {
|
|
|
44
44
|
*
|
|
45
45
|
* @returns An empty set
|
|
46
46
|
*
|
|
47
|
-
* @since
|
|
47
|
+
* @since v0.3.0
|
|
48
48
|
*/
|
|
49
49
|
export let make = () => {
|
|
50
50
|
makeSized(16)
|
|
@@ -121,7 +121,7 @@ let rec nodeInBucket = (key, node) => {
|
|
|
121
121
|
* @param key: The value to add
|
|
122
122
|
* @param set: The set to update
|
|
123
123
|
*
|
|
124
|
-
* @since
|
|
124
|
+
* @since v0.3.0
|
|
125
125
|
*/
|
|
126
126
|
export let add = (key, set) => {
|
|
127
127
|
let buckets = set.buckets
|
|
@@ -154,7 +154,7 @@ export let add = (key, set) => {
|
|
|
154
154
|
* @param set: The set to search
|
|
155
155
|
* @returns `true` if the set contains the given value or `false` otherwise
|
|
156
156
|
*
|
|
157
|
-
* @since
|
|
157
|
+
* @since v0.3.0
|
|
158
158
|
*/
|
|
159
159
|
export let contains = (key, set) => {
|
|
160
160
|
let buckets = set.buckets
|
|
@@ -186,7 +186,7 @@ let rec removeInBucket = (key, node) => {
|
|
|
186
186
|
* @param key: The value to remove
|
|
187
187
|
* @param set: The set to update
|
|
188
188
|
*
|
|
189
|
-
* @since
|
|
189
|
+
* @since v0.3.0
|
|
190
190
|
*/
|
|
191
191
|
export let remove = (key, set) => {
|
|
192
192
|
let buckets = set.buckets
|
|
@@ -214,7 +214,7 @@ export let remove = (key, set) => {
|
|
|
214
214
|
* @param set: The set to inspect
|
|
215
215
|
* @returns The count of elements in the set
|
|
216
216
|
*
|
|
217
|
-
* @since
|
|
217
|
+
* @since v0.3.0
|
|
218
218
|
*/
|
|
219
219
|
export let size = set => {
|
|
220
220
|
set.size
|
|
@@ -226,7 +226,7 @@ export let size = set => {
|
|
|
226
226
|
* @param set: The set to inspect
|
|
227
227
|
* @returns `true` if the given set is empty or `false` otherwise
|
|
228
228
|
*
|
|
229
|
-
* @since
|
|
229
|
+
* @since v0.3.0
|
|
230
230
|
*/
|
|
231
231
|
export let isEmpty = set => {
|
|
232
232
|
size(set) == 0
|
|
@@ -237,7 +237,7 @@ export let isEmpty = set => {
|
|
|
237
237
|
*
|
|
238
238
|
* @param set: The set to reset
|
|
239
239
|
*
|
|
240
|
-
* @since
|
|
240
|
+
* @since v0.3.0
|
|
241
241
|
*/
|
|
242
242
|
export let clear = set => {
|
|
243
243
|
set.size = 0
|
|
@@ -263,7 +263,7 @@ let rec forEachBucket = (fn, node) => {
|
|
|
263
263
|
* @param fn: The iterator function to call with each element
|
|
264
264
|
* @param set: The set to iterate
|
|
265
265
|
*
|
|
266
|
-
* @since
|
|
266
|
+
* @since v0.3.0
|
|
267
267
|
* @history v0.5.0: Ensured the iterator function return type is always `Void`
|
|
268
268
|
*/
|
|
269
269
|
export let forEach = (fn, set) => {
|
|
@@ -288,7 +288,7 @@ let rec reduceEachBucket = (fn, node, acc) => {
|
|
|
288
288
|
* @param set: The set to iterate
|
|
289
289
|
* @returns The final accumulator returned from `fn`
|
|
290
290
|
*
|
|
291
|
-
* @since
|
|
291
|
+
* @since v0.3.0
|
|
292
292
|
*/
|
|
293
293
|
export let reduce = (fn, init, set) => {
|
|
294
294
|
let buckets = set.buckets
|
|
@@ -305,10 +305,10 @@ export let reduce = (fn, init, set) => {
|
|
|
305
305
|
* @param fn: The predicate function to indicate which elements to remove from the set, where returning `false` indicates the value should be removed
|
|
306
306
|
* @param set: The set to iterate
|
|
307
307
|
*
|
|
308
|
-
* @since
|
|
308
|
+
* @since v0.3.0
|
|
309
309
|
*/
|
|
310
|
-
export let filter = (
|
|
311
|
-
let keysToRemove = reduce((list, key) => if (!
|
|
310
|
+
export let filter = (fn, set) => {
|
|
311
|
+
let keysToRemove = reduce((list, key) => if (!fn(key)) {
|
|
312
312
|
[key, ...list]
|
|
313
313
|
} else {
|
|
314
314
|
list
|
|
@@ -324,10 +324,10 @@ export let filter = (predicate, set) => {
|
|
|
324
324
|
* @param fn: The predicate function to indicate which elements to remove from the set, where returning `true` indicates the value should be removed
|
|
325
325
|
* @param set: The set to iterate
|
|
326
326
|
*
|
|
327
|
-
* @since
|
|
327
|
+
* @since v0.3.0
|
|
328
328
|
*/
|
|
329
|
-
export let reject = (
|
|
330
|
-
filter(key => !
|
|
329
|
+
export let reject = (fn, set) => {
|
|
330
|
+
filter(key => !fn(key), set)
|
|
331
331
|
}
|
|
332
332
|
|
|
333
333
|
/**
|
|
@@ -336,7 +336,7 @@ export let reject = (predicate, set) => {
|
|
|
336
336
|
* @param set: The set to convert
|
|
337
337
|
* @returns A list containing all set values
|
|
338
338
|
*
|
|
339
|
-
* @since
|
|
339
|
+
* @since v0.3.0
|
|
340
340
|
*/
|
|
341
341
|
export let toList = set => {
|
|
342
342
|
reduce((list, key) => [key, ...list], [], set)
|
|
@@ -348,7 +348,7 @@ export let toList = set => {
|
|
|
348
348
|
* @param list: The list to convert
|
|
349
349
|
* @returns A set containing all list values
|
|
350
350
|
*
|
|
351
|
-
* @since
|
|
351
|
+
* @since v0.3.0
|
|
352
352
|
*/
|
|
353
353
|
export let fromList = list => {
|
|
354
354
|
let set = make()
|
|
@@ -364,7 +364,7 @@ export let fromList = list => {
|
|
|
364
364
|
* @param set: The set to convert
|
|
365
365
|
* @returns An array containing all set values
|
|
366
366
|
*
|
|
367
|
-
* @since
|
|
367
|
+
* @since v0.3.0
|
|
368
368
|
*/
|
|
369
369
|
export let toArray = set => {
|
|
370
370
|
Array.fromList(toList(set))
|
|
@@ -376,7 +376,7 @@ export let toArray = set => {
|
|
|
376
376
|
* @param array: The array to convert
|
|
377
377
|
* @returns A set containing all array values
|
|
378
378
|
*
|
|
379
|
-
* @since
|
|
379
|
+
* @since v0.3.0
|
|
380
380
|
*/
|
|
381
381
|
export let fromArray = array => {
|
|
382
382
|
let set = make()
|
|
@@ -393,7 +393,7 @@ export let fromArray = array => {
|
|
|
393
393
|
* @param set2: The second set to combine
|
|
394
394
|
* @returns A set containing all elements of both sets
|
|
395
395
|
*
|
|
396
|
-
* @since
|
|
396
|
+
* @since v0.3.0
|
|
397
397
|
*/
|
|
398
398
|
export let union = (set1, set2) => {
|
|
399
399
|
let set = make()
|
|
@@ -413,7 +413,7 @@ export let union = (set1, set2) => {
|
|
|
413
413
|
* @param set2: The second set to combine
|
|
414
414
|
* @returns A set containing only unshared elements from both sets
|
|
415
415
|
*
|
|
416
|
-
* @since
|
|
416
|
+
* @since v0.3.0
|
|
417
417
|
*/
|
|
418
418
|
export let diff = (set1, set2) => {
|
|
419
419
|
let set = make()
|
|
@@ -437,7 +437,7 @@ export let diff = (set1, set2) => {
|
|
|
437
437
|
* @param set2: The second set to combine
|
|
438
438
|
* @returns A set containing only shared elements from both sets
|
|
439
439
|
*
|
|
440
|
-
* @since
|
|
440
|
+
* @since v0.3.0
|
|
441
441
|
*/
|
|
442
442
|
export let intersect = (set1, set2) => {
|
|
443
443
|
let set = make()
|
|
@@ -454,15 +454,14 @@ export let intersect = (set1, set2) => {
|
|
|
454
454
|
set
|
|
455
455
|
}
|
|
456
456
|
|
|
457
|
-
// TODO: Should return a Record type instead of a Tuple
|
|
458
|
-
// Waiting on https://github.com/grain-lang/grain/issues/190
|
|
457
|
+
// TODO(#190): Should return a Record type instead of a Tuple
|
|
459
458
|
/**
|
|
460
459
|
* Provides data representing the internal state state of the set.
|
|
461
460
|
*
|
|
462
461
|
* @param set: The set to inspect
|
|
463
462
|
* @returns The internal state of the set
|
|
464
463
|
*
|
|
465
|
-
* @since
|
|
464
|
+
* @since v0.3.0
|
|
466
465
|
*/
|
|
467
466
|
export let getInternalStats = set => {
|
|
468
467
|
(set.size, Array.length(set.buckets))
|
package/stack.gr
CHANGED
|
@@ -20,10 +20,22 @@ record Stack<a> {
|
|
|
20
20
|
* @section Values: Functions and constants included in the Stack module.
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* An empty stack.
|
|
25
|
+
*
|
|
26
|
+
* @since v0.5.4
|
|
27
|
+
*/
|
|
28
|
+
export let empty = {
|
|
29
|
+
let empty = { data: [], }
|
|
30
|
+
empty
|
|
31
|
+
}
|
|
32
|
+
|
|
23
33
|
/**
|
|
24
34
|
* Creates a new stack.
|
|
25
35
|
*
|
|
26
36
|
* @returns An empty stack
|
|
37
|
+
*
|
|
38
|
+
* @deprecated This will be removed in the v0.6.0 release of Grain.
|
|
27
39
|
*/
|
|
28
40
|
export let make = () => {
|
|
29
41
|
{ data: [], }
|
package/stack.md
CHANGED
|
@@ -24,8 +24,23 @@ Stacks are immutable data structures that store their data in a List.
|
|
|
24
24
|
|
|
25
25
|
Functions and constants included in the Stack module.
|
|
26
26
|
|
|
27
|
+
### Stack.**empty**
|
|
28
|
+
|
|
29
|
+
<details disabled>
|
|
30
|
+
<summary tabindex="-1">Added in <code>0.5.4</code></summary>
|
|
31
|
+
No other changes yet.
|
|
32
|
+
</details>
|
|
33
|
+
|
|
34
|
+
```grain
|
|
35
|
+
empty : Stack<a>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
An empty stack.
|
|
39
|
+
|
|
27
40
|
### Stack.**make**
|
|
28
41
|
|
|
42
|
+
> **Deprecated:** This will be removed in the v0.6.0 release of Grain.
|
|
43
|
+
|
|
29
44
|
```grain
|
|
30
45
|
make : () -> Stack<a>
|
|
31
46
|
```
|