aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2021-09-01 22:16:21 +0100
committerLouis Pilfold <louis@lpil.uk>2021-09-01 22:16:21 +0100
commit3477ae008a46ffca6c79ee4f9ad8ec876d25ce31 (patch)
tree431d290fea5de7b38475750b3a312f67c178ad87
parent165acf00cc9edff603bf200a2b8ce73c6577621d (diff)
downloadgleam_stdlib-3477ae008a46ffca6c79ee4f9ad8ec876d25ce31.tar.gz
gleam_stdlib-3477ae008a46ffca6c79ee4f9ad8ec876d25ce31.zip
Use undefined as set token on JS
-rw-r--r--src/gleam/map.gleam8
-rw-r--r--src/gleam/set.gleam24
2 files changed, 23 insertions, 9 deletions
diff --git a/src/gleam/map.gleam b/src/gleam/map.gleam
index 8e423cc..89efee4 100644
--- a/src/gleam/map.gleam
+++ b/src/gleam/map.gleam
@@ -92,10 +92,6 @@ if javascript {
}
}
-fn insert_pair(pair: #(k, v), map: Map(k, v)) -> Map(k, v) {
- insert(map, pair.0, pair.1)
-}
-
/// Determines whether or not a value present in the map for a given key.
///
/// ## Examples
@@ -378,6 +374,10 @@ if erlang {
}
if javascript {
+ fn insert_pair(pair: #(k, v), map: Map(k, v)) -> Map(k, v) {
+ insert(map, pair.0, pair.1)
+ }
+
fn do_merge(map: Map(k, v), new_entries: Map(k, v)) -> Map(k, v) {
new_entries
|> to_list
diff --git a/src/gleam/set.gleam b/src/gleam/set.gleam
index 61bb47a..67b2252 100644
--- a/src/gleam/set.gleam
+++ b/src/gleam/set.gleam
@@ -2,15 +2,29 @@ import gleam/map.{Map}
import gleam/result
import gleam/list
+if erlang {
+ // A list is used as the map value as an empty list has the smallest
+ // representation in Erlang's binary format
+ type Token =
+ List(Nil)
+
+ const token = []
+}
+
+if javascript {
+ type Token =
+ Nil
+
+ const token = Nil
+}
+
/// A set is a collection of unique members of the same type.
///
/// It is implemented using the `gleam/map` module, so inserts and lookups have
/// logarithmic time complexity.
///
pub opaque type Set(member) {
- // A list is used as the map value as an empty list has the smallest
- // representation in Erlang's binary format
- Set(map: Map(member, List(Nil)))
+ Set(map: Map(member, Token))
}
/// Creates a new empty set.
@@ -42,7 +56,7 @@ pub fn size(set: Set(member)) -> Int {
/// 2
///
pub fn insert(into set: Set(member), this member: member) -> Set(member) {
- Set(map: map.insert(set.map, member, []))
+ Set(map: map.insert(set.map, member, token))
}
/// Checks whether a set contains a given member.
@@ -108,7 +122,7 @@ pub fn from_list(members: List(member)) -> Set(member) {
list.fold(
over: members,
from: map.new(),
- with: fn(k, m) { map.insert(m, k, []) },
+ with: fn(k, m) { map.insert(m, k, token) },
)
Set(map)
}