Skip to content

Commit 03f4eea

Browse files
authored
docs for Set (#35)
1 parent 99cd2a5 commit 03f4eea

File tree

4 files changed

+194
-3
lines changed

4 files changed

+194
-3
lines changed

src/Core__Set.res

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ type t<'a>
88

99
@send external clear: t<'a> => unit = "clear"
1010

11-
@send external add: (t<'a>, 'a) => t<'a> = "add"
11+
@send external add: (t<'a>, 'a) => unit = "add"
1212
@send external delete: (t<'a>, 'a) => bool = "delete"
1313
@send external has: (t<'a>, 'a) => bool = "has"
1414

src/Core__Set.resi

+185
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
/***
2+
Bindings to the mutable JavaScript `Set`.
3+
4+
See [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) on MDN.
5+
*/
6+
7+
/**
8+
Type representing an instance of `Set`.
9+
*/
10+
type t<'a>
11+
12+
/**
13+
Creates a new, mutable JavaScript `Set`. A `Set` is a collection of unique values.
14+
15+
See [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) on MDN.
16+
17+
18+
19+
## Examples
20+
```rescript
21+
// You can annotate the type of your set if you want to
22+
let mySet: Set.t<string> = Set.make()
23+
24+
// Or you can let ReScript infer what's in your Set
25+
let set = Set.make()
26+
set->Set.add("Fine name") // Inferred as Set.t<string>
27+
```
28+
29+
## Alternatives
30+
A JavaScript `Set` is mutable. If you're looking for an immutable alternative, check out `Belt.Set`.
31+
*/
32+
@new
33+
external make: unit => t<'a> = "Set"
34+
35+
/**
36+
Turns an array of values into a Set. Meaning only unique values are preserved.
37+
38+
## Examples
39+
```rescript
40+
type languages = ReScript | JavaScript | TypeScript
41+
let languageRank = [ReScript, JavaScript, TypeScript]
42+
43+
let set = Set.fromArray(languageRank) // Set.t<languages>
44+
45+
switch set->Set.has(ReScript) {
46+
| true => Console.log("Yay, ReScript is in there!")
47+
| false => Console.log("Uh-oh, something is _terribly_ wrong with this program... abort.")
48+
}
49+
```
50+
*/
51+
@new
52+
external fromArray: array<'a> => t<'a> = "Set"
53+
54+
/**
55+
Turns an iterator into a `Set`.
56+
57+
## Examples
58+
```rescript
59+
// Let's pretend we have an interator
60+
@val external someIterator: Iterator.t<int> = "someIterator"
61+
62+
let set = Set.fromIterator(someIterator) // Set.t<int>
63+
```
64+
*/
65+
@new
66+
external fromIterator: Core__Iterator.t<'a> => t<'a> = "Set"
67+
68+
/**
69+
Returns the size, the number of unique values, of the set.
70+
71+
## Examples
72+
```rescript
73+
let set = Set.make()
74+
75+
set->Set.add("someValue")
76+
set->Set.add("someValue")
77+
set->Set.add("someValue2")
78+
79+
let size = set->Set.size // 2
80+
```
81+
*/
82+
@get
83+
external size: t<'a> => int = "size"
84+
85+
/**
86+
Clears all entries in the set.
87+
88+
## Examples
89+
```rescript
90+
let set = Set.make()
91+
92+
set->Set.add("someKey")
93+
let size = set->Set.size // 1
94+
95+
set->Set.clear
96+
let size = set->Set.size // 0
97+
```
98+
*/
99+
@send
100+
external clear: t<'a> => unit = "clear"
101+
102+
/**
103+
Adds a new value to the set.
104+
105+
## Examples
106+
```rescript
107+
let set = Set.make()
108+
set->Set.add("someValue")
109+
```
110+
*/
111+
@send
112+
external add: (t<'a>, 'a) => unit = "add"
113+
114+
/**
115+
Deletes the provided `value` from the set. Returns a `bool` for whether the value existed, and was deleted.
116+
117+
## Examples
118+
```rescript
119+
let set = Set.make()
120+
set->Set.add("someValue")
121+
let didDeleteValue = set->Set.delete("someValue")
122+
Console.log(didDeleteValue) // Logs `true` to the console, becuase the set had the value, so it was successfully deleted
123+
124+
let didDeleteValue = set->Set.delete("someNonExistantKey")
125+
Console.log(didDeleteValue) // Logs `false` to the console, becuase the value did not exist in the set
126+
```
127+
*/
128+
@send
129+
external delete: (t<'a>, 'a) => bool = "delete"
130+
131+
/**
132+
Checks whether the set has a specific value.
133+
134+
## Examples
135+
```rescript
136+
let set = Set.make()
137+
set->Set.add("someValue")
138+
139+
switch set->Set.has("someValue") {
140+
| false => Console.log("Nope, didn't have it.")
141+
| true => Console.log("Yay, we have the value!")
142+
}
143+
```
144+
*/
145+
@send
146+
external has: (t<'a>, 'a) => bool = "has"
147+
148+
/**
149+
Iterates through all values of the set.
150+
151+
## Examples
152+
```rescript
153+
let set = Set.make()
154+
set->Set.add("someValue")
155+
set->Set.add("someValue2")
156+
157+
set->Set.forEach(value => {
158+
Console.log(value)
159+
})
160+
```
161+
*/
162+
@send
163+
external forEach: (t<'a>, 'a => unit) => unit = "forEach"
164+
165+
/**
166+
Returns an iterator that holds all values of the set.
167+
168+
## Examples
169+
```rescript
170+
let set = Set.make()
171+
set->Set.add("someValue")
172+
set->Set.add("anotherValue")
173+
174+
let values = set->Set.values
175+
176+
// Logs the first value
177+
Console.log(Iterator.next(values).value)
178+
179+
// You can also turn the iterator into an array.
180+
// Remember that an iterator consumes values. We'll need a fresh values iterator to get an array of all values, since we consumed a value via `next` above already.
181+
Console.log(set->Set.values->Iterator.toArray)
182+
```
183+
*/
184+
@send
185+
external values: t<'a> => Core__Iterator.t<'a> = "values"

test/TempTests.mjs

+5-1
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,11 @@ console.info("---");
254254

255255
var set = new Set();
256256

257-
set.add(1).add(2).delete(2);
257+
set.add(1);
258+
259+
set.add(2);
260+
261+
set.delete(2);
258262

259263
console.log(set);
260264

test/TempTests.res

+3-1
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,9 @@ Console.info("")
142142
Console.info("Set")
143143
Console.info("---")
144144
let set = Set.make()
145-
let _ = set->Set.add(1)->Set.add(2)->Set.delete(2)
145+
set->Set.add(1)
146+
set->Set.add(2)
147+
let _ = set->Set.delete(2)
146148
Console.log(set)
147149

148150
Console.info("")

0 commit comments

Comments
 (0)