Packages
gleam_stdlib
0.6.0
1.0.3
1.0.2
1.0.1
1.0.0
0.71.0
0.70.0
0.69.0
0.68.1
0.68.0
0.67.1
0.67.0
0.65.0
0.64.0
0.63.2
0.63.1
0.63.0
0.62.1
0.62.0
0.61.0
0.60.0
0.59.0
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.1
0.35.0
0.34.0
0.33.1
0.33.0
0.32.1
0.32.0
0.31.0
0.30.2
0.30.1
0.30.0
0.29.2
0.29.1
0.29.0
0.28.2
0.28.1
0.28.0
0.27.0
0.26.1
0.26.0
0.25.0
0.24.0
0.23.0
0.22.3
0.22.2
0.22.1
0.22.0
0.21.0
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.18.0-rc1
0.17.1
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.4.0-rc1
0.3.1
0.3.0
0.2.0
retired
A standard library for the Gleam programming language
Current section
Files
Jump to
Current section
Files
src/gleam/map.gleam
import gleam/result
import gleam/list
pub external type Map(key, value);
pub external fn size(Map(k, v)) -> Int
= "maps" "size"
pub external fn to_list(Map(key, value)) -> List(tuple(key, value))
= "maps" "to_list"
pub external fn from_list(List(tuple(key, value))) -> Map(key, value)
= "maps" "from_list"
external fn is_key(key, Map(key, v)) -> Bool
= "maps" "is_key"
pub fn has_key(map, key) {
is_key(key, map)
}
pub external fn new() -> Map(key, value)
= "maps" "new"
pub external fn get(from: Map(key, value), get: key) -> Result(value, Nil)
= "gleam_stdlib" "map_get";
external fn erl_insert(key, value, Map(key, value)) -> Map(key, value)
= "maps" "put";
pub fn insert(into map, for key, insert value) {
erl_insert(key, value, map)
}
external fn erl_map_values(fn(key, value) -> value, Map(key, value))
-> Map(key, value)
= "maps" "map";
pub fn map_values(in map, with fun) {
erl_map_values(fun, map)
}
pub external fn keys(Map(keys, v)) -> List(keys)
= "maps" "keys"
pub external fn values(Map(k, values)) -> List(values)
= "maps" "values"
external fn erl_filter(fn(key, value) -> Bool, Map(key, value))
-> Map(key, value)
= "maps" "filter";
pub fn filter(in map, for predicate) {
erl_filter(predicate, map)
}
external fn erl_take(List(k), Map(k, v)) -> Map(k, v) = "maps" "with"
pub fn take(from map, drop desired_keys) {
erl_take(desired_keys, map)
}
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"
pub fn delete(from map, delete key) {
erl_delete(key, map)
}
pub fn drop(from map, drop disallowed_keys) {
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)))
}
}
fn do_fold(list, initial, fun) {
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)
}