Packages
gleam_stdlib
0.4.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/any
import gleam/result
import gleam/list
import gleam/pair
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(pair.Pair(key, value))
= "maps" "to_list"
pub external fn from_list(List(pair.Pair(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 fetch(Map(key, value), key) -> Result(value, Nil)
= "gleam_stdlib" "map_fetch";
external fn erl_put(key, value, Map(key, value)) -> Map(key, value)
= "maps" "put";
pub fn put(map, key, value) {
erl_put(key, value, map)
}
external fn erl_map_values(fn(key, value) -> value, Map(key, value))
-> Map(key, value)
= "maps" "map";
pub fn map_values(map, 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(map, fun) {
erl_filter(fun, map)
}
external fn erl_take(List(k), Map(k, v)) -> Map(k, v) = "maps" "with"
pub fn take(map, keys) {
erl_take(keys, map)
}
pub external fn merge(Map(k, v), Map(k, v)) -> Map(k, v) = "maps" "merge"
external fn erl_delete(k, Map(k, v)) -> Map(k, v) = "maps" "remove"
pub fn delete(map, key) {
erl_delete(key, map)
}
pub fn drop(map, keys) {
list.fold(keys, map, fn(key, acc) {
delete(acc, key)
})
}
pub fn update(dict, key, f) {
case fetch(dict, key) {
| Ok(value) -> put(dict, key, f(Ok(value)))
| Error(_) -> put(dict, key, f(Error(Nil)))
}
}
fn do_fold(list, acc, f) {
case list {
| [] -> acc
| [pair.Pair(k, v) | tail] -> do_fold(tail, f(k, v, acc), f)
}
}
pub fn fold(dict, acc, f) {
let kvs = to_list(dict)
do_fold(kvs, acc, f)
}