@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.
Files changed (54) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/array.gr +61 -1
  3. package/array.md +113 -0
  4. package/bigint.md +30 -30
  5. package/buffer.gr +24 -22
  6. package/char.gr +2 -2
  7. package/float32.md +3 -3
  8. package/float64.md +3 -3
  9. package/immutablemap.gr +493 -0
  10. package/immutablemap.md +479 -0
  11. package/immutablepriorityqueue.gr +360 -0
  12. package/immutablepriorityqueue.md +291 -0
  13. package/immutableset.gr +498 -0
  14. package/immutableset.md +449 -0
  15. package/list.gr +75 -2
  16. package/list.md +110 -0
  17. package/map.gr +1 -2
  18. package/marshal.gr +1058 -0
  19. package/marshal.md +76 -0
  20. package/number.gr +689 -23
  21. package/number.md +362 -27
  22. package/package.json +1 -1
  23. package/pervasives.gr +16 -5
  24. package/pervasives.md +28 -0
  25. package/priorityqueue.gr +261 -0
  26. package/priorityqueue.md +309 -0
  27. package/queue.gr +14 -1
  28. package/queue.md +16 -1
  29. package/regex.gr +90 -67
  30. package/runtime/bigint.gr +4 -4
  31. package/runtime/compare.gr +179 -0
  32. package/runtime/compare.md +6 -0
  33. package/runtime/equal.gr +3 -3
  34. package/runtime/exception.gr +9 -5
  35. package/runtime/exception.md +8 -2
  36. package/runtime/gc.gr +2 -1
  37. package/runtime/malloc.gr +1 -3
  38. package/runtime/numberUtils.gr +11 -11
  39. package/runtime/numbers.gr +423 -100
  40. package/runtime/numbers.md +50 -0
  41. package/runtime/string.gr +4 -2
  42. package/set.gr +26 -27
  43. package/stack.gr +12 -0
  44. package/stack.md +15 -0
  45. package/string.gr +409 -53
  46. package/string.md +164 -1
  47. package/sys/file.gr +4 -4
  48. package/sys/file.md +3 -3
  49. package/sys/process.gr +3 -3
  50. package/sys/process.md +3 -3
  51. package/sys/random.gr +2 -2
  52. package/sys/random.md +2 -2
  53. package/sys/time.gr +2 -2
  54. package/sys/time.md +2 -2
@@ -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
- }, toStringHelp = (grainValue, extraIndents, toplevel) => {
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
- }, listToString = (ptr, extraIndents) => {
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
308
+ * @since v0.3.0
309
309
  */
310
- export let filter = (predicate, set) => {
311
- let keysToRemove = reduce((list, key) => if (!predicate(key)) {
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 0.3.0
327
+ * @since v0.3.0
328
328
  */
329
- export let reject = (predicate, set) => {
330
- filter(key => !predicate(key), set)
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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 0.3.0
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
  ```