Current section

Files

Jump to
gleam_stdlib gen src gleam@map.erl
Raw

gen/src/gleam@map.erl

-module(gleam@map).
-compile(no_auto_import).
-export([size/1, to_list/1, from_list/1, has_key/2, new/0, get/2, insert/3, map_values/2, keys/1, values/1, filter/2, take/2, merge/2, delete/2, drop/2, update/3, fold/3]).
-export_type([map_/2]).
-type map_(Key, Value) :: any() | {gleam_phantom, Key, Value}.
-spec size(map_(any(), any())) -> integer().
size(A) ->
maps:size(A).
-spec to_list(map_(CMT, CMU)) -> list({CMT, CMU}).
to_list(A) ->
maps:to_list(A).
-spec from_list(list({CMY, CMZ})) -> map_(CMY, CMZ).
from_list(A) ->
maps:from_list(A).
-spec has_key(map_(CNH, any()), CNH) -> boolean().
has_key(Map, Key) ->
maps:is_key(Key, Map).
-spec new() -> map_(any(), any()).
new() ->
maps:new().
-spec get(map_(CNS, CNP), CNS) -> {ok, CNP} | {error, nil}.
get(A, B) ->
gleam_stdlib:map_get(A, B).
-spec insert(map_(COB, COC), COB, COC) -> map_(COB, COC).
insert(Map, Key, Value) ->
maps:put(Key, Value, Map).
-spec map_values(map_(COP, COQ), fun((COP, COQ) -> COT)) -> map_(COP, COT).
map_values(Map, Fun) ->
maps:map(Fun, Map).
-spec keys(map_(COW, any())) -> list(COW).
keys(A) ->
maps:keys(A).
-spec values(map_(any(), CPB)) -> list(CPB).
values(A) ->
maps:values(A).
-spec filter(map_(CPM, CPN), fun((CPM, CPN) -> boolean())) -> map_(CPM, CPN).
filter(Map, Property) ->
maps:filter(Property, Map).
-spec take(map_(CPZ, CQA), list(CPZ)) -> map_(CPZ, CQA).
take(Map, Desired_keys) ->
maps:with(Desired_keys, Map).
-spec merge(map_(CQG, CQH), map_(CQG, CQH)) -> map_(CQG, CQH).
merge(A, B) ->
maps:merge(A, B).
-spec delete(map_(CQU, CQV), CQU) -> map_(CQU, CQV).
delete(Map, Key) ->
maps:remove(Key, Map).
-spec drop(map_(CRA, CRB), list(CRA)) -> map_(CRA, CRB).
drop(Map, Disallowed_keys) ->
gleam@list:fold(Disallowed_keys, Map, fun(Key, Acc) -> delete(Acc, Key) end).
-spec update(map_(CRH, CRI), CRH, fun(({ok, CRI} | {error, nil}) -> CRI)) -> map_(CRH, CRI).
update(Map, Key, Fun) ->
insert(Map, Key, Fun(gleam_stdlib:map_get(Map, Key))).
-spec do_fold(list({CRP, CRQ}), CRS, fun((CRP, CRQ, CRS) -> CRS)) -> CRS.
do_fold(List, Initial, Fun) ->
case List of
[] ->
Initial;
[{K, V} | Tail] ->
do_fold(Tail, Fun(K, V, Initial), Fun)
end.
-spec fold(map_(CRT, CRU), CRX, fun((CRT, CRU, CRX) -> CRX)) -> CRX.
fold(Map, Initial, Fun) ->
do_fold(maps:to_list(Map), Initial, Fun).