diff options
author | Louis Pilfold <louis@lpil.uk> | 2021-09-01 22:16:21 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2021-09-01 22:16:21 +0100 |
commit | 3477ae008a46ffca6c79ee4f9ad8ec876d25ce31 (patch) | |
tree | 431d290fea5de7b38475750b3a312f67c178ad87 | |
parent | 165acf00cc9edff603bf200a2b8ce73c6577621d (diff) | |
download | gleam_stdlib-3477ae008a46ffca6c79ee4f9ad8ec876d25ce31.tar.gz gleam_stdlib-3477ae008a46ffca6c79ee4f9ad8ec876d25ce31.zip |
Use undefined as set token on JS
-rw-r--r-- | src/gleam/map.gleam | 8 | ||||
-rw-r--r-- | src/gleam/set.gleam | 24 |
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) } |