aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2020-01-14 09:42:07 +0000
committerLouis Pilfold <louis@lpil.uk>2020-01-14 09:42:07 +0000
commit36957584a74a2e299971e0c00ff9e03d03d5a205 (patch)
tree8dbc1729a59989a03e046de59432d01485ecc8b3
parent086b09e281be1ccdbbb4f3b4487c161f1e42b772 (diff)
downloadgleam_stdlib-36957584a74a2e299971e0c00ff9e03d03d5a205.tar.gz
gleam_stdlib-36957584a74a2e299971e0c00ff9e03d03d5a205.zip
Type annotations for gleam/map
-rw-r--r--gen/src/gleam@map.erl11
-rw-r--r--src/gleam/map.gleam53
2 files changed, 34 insertions, 30 deletions
diff --git a/gen/src/gleam@map.erl b/gen/src/gleam@map.erl
index ce77ac1..66b4feb 100644
--- a/gen/src/gleam@map.erl
+++ b/gen/src/gleam@map.erl
@@ -67,13 +67,7 @@ drop(Map, DisallowedKeys) ->
gleam@list:fold(DisallowedKeys, Map, fun(Key, Acc) -> delete(Acc, Key) end).
update(Map, Key, Fun) ->
- case get(Map, Key) of
- {ok, Value} ->
- insert(Map, Key, Fun({ok, Value}));
-
- {error, _} ->
- insert(Map, Key, Fun({error, nil}))
- end.
+ insert(Map, Key, Fun(get(Map, Key))).
do_fold(List, Initial, Fun) ->
case List of
@@ -85,5 +79,4 @@ do_fold(List, Initial, Fun) ->
end.
fold(Map, Initial, Fun) ->
- Kvs = to_list(Map),
- do_fold(Kvs, Initial, Fun).
+ do_fold(to_list(Map), Initial, Fun).
diff --git a/src/gleam/map.gleam b/src/gleam/map.gleam
index 00e6f1c..a57605a 100644
--- a/src/gleam/map.gleam
+++ b/src/gleam/map.gleam
@@ -15,7 +15,7 @@ pub external fn from_list(List(tuple(key, value))) -> Map(key, value)
external fn is_key(key, Map(key, v)) -> Bool
= "maps" "is_key"
-pub fn has_key(map, key) {
+pub fn has_key(map: Map(k, v), key: k) -> Bool {
is_key(key, map)
}
@@ -28,15 +28,15 @@ pub external fn get(from: Map(key, value), get: key) -> Result(value, Nil)
external fn erl_insert(key, value, Map(key, value)) -> Map(key, value)
= "maps" "put";
-pub fn insert(into map, for key, insert value) {
+pub fn insert(into map: Map(k, v), for key: k, insert value: v) -> Map(k, v) {
erl_insert(key, value, map)
}
-external fn erl_map_values(fn(key, value) -> value, Map(key, value))
- -> Map(key, value)
+external fn erl_map_values(fn(key, a) -> b, Map(key, value))
+ -> Map(key, b)
= "maps" "map";
-pub fn map_values(in map, with fun) {
+pub fn map_values(in map: Map(k, v), with fun: fn(k, v) -> w) -> Map(k, w) {
erl_map_values(fun, map)
}
@@ -50,45 +50,56 @@ external fn erl_filter(fn(key, value) -> Bool, Map(key, value))
-> Map(key, value)
= "maps" "filter";
-pub fn filter(in map, for predicate) {
+pub fn filter(in map: Map(k, v), for predicate: fn(k, v) -> Bool) -> Map(k, v) {
erl_filter(predicate, map)
}
-external fn erl_take(List(k), Map(k, v)) -> Map(k, v) = "maps" "with"
+external fn erl_take(List(k), Map(k, v)) -> Map(k, v)
+ = "maps" "with"
-pub fn take(from map, drop desired_keys) {
+pub fn take(from map: Map(k, v), drop desired_keys: List(k)) -> Map(k, v) {
erl_take(desired_keys, map)
}
-pub external fn merge(into: Map(k, v), merge: Map(k, v)) -> Map(k, v) = "maps" "merge"
+pub external fn merge(into: Map(k, v), merge: Map(k, v)) -> Map(k, v)
+ = "maps" "merge"
-external fn erl_delete(k, Map(k, v)) -> Map(k, v) = "maps" "remove"
+external fn erl_delete(k, Map(k, v)) -> Map(k, v)
+ = "maps" "remove"
-pub fn delete(from map, delete key) {
+pub fn delete(from map: Map(k, v), delete key: k) -> Map(k, v) {
erl_delete(key, map)
}
-pub fn drop(from map, drop disallowed_keys) {
+pub fn drop(from map: Map(k, v), drop disallowed_keys: List(k)) -> Map(k, v) {
list.fold(disallowed_keys, map, fn(key, acc) {
delete(acc, key)
})
}
-pub fn update(in map, update key, with fun) {
- case get(map, key) {
- Ok(value) -> insert(map, key, fun(Ok(value)))
- Error(_) -> insert(map, key, fun(Error(Nil)))
- }
+pub fn update(
+ in map: Map(k, v),
+ update key: k,
+ with fun: fn(Result(v, Nil)) -> v,
+) -> Map(k, v) {
+ map |> get(_, key) |> fun |> insert(map, key, _)
}
-fn do_fold(list, initial, fun) {
+fn do_fold(
+ list: List(tuple(k, v)),
+ initial: acc,
+ fun: fn(k, v, acc) -> acc,
+) -> acc {
case list {
[] -> initial
[tuple(k, v) | tail] -> do_fold(tail, fun(k, v, initial), fun)
}
}
-pub fn fold(map, from initial, with fun) {
- let kvs = to_list(map)
- do_fold(kvs, initial, fun)
+pub fn fold(
+ map: Map(k, v),
+ from initial: acc,
+ with fun: fn(k, v, acc) -> acc,
+) -> acc {
+ map |> to_list |> do_fold(_, initial, fun)
}