1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
-module(std@map_dict).
-compile(no_auto_import).
-export([size/1, to_list/1, from_list/1, has_key/2, new/0, fetch/2, put/3, map_values/2, keys/1, values/1, filter/2, take/2, merge/2, delete/2, drop/2, update/3, fold/3]).
size(A) ->
maps:size(A).
to_list(A) ->
maps:to_list(A).
from_list(A) ->
maps:from_list(A).
is_key(A, B) ->
maps:is_key(A, B).
has_key(Map, Key) ->
is_key(Key, Map).
new() ->
maps:new().
fetch(A, B) ->
gleam__stdlib:map_fetch(A, B).
erl_put(A, B, C) ->
maps:put(A, B, C).
put(Map, Key, Value) ->
erl_put(Key, Value, Map).
erl_map_values(A, B) ->
maps:map(A, B).
map_values(Map, Fun) ->
erl_map_values(Fun, Map).
keys(A) ->
maps:keys(A).
values(A) ->
maps:values(A).
erl_filter(A, B) ->
maps:filter(A, B).
filter(Map, Fun) ->
erl_filter(Fun, Map).
erl_take(A, B) ->
maps:with(A, B).
take(Map, Keys) ->
erl_take(Keys, Map).
merge(A, B) ->
maps:merge(A, B).
erl_delete(A, B) ->
maps:remove(A, B).
delete(Map, Key) ->
erl_delete(Key, Map).
drop(Map, Keys) ->
std@list:fold(Keys, Map, fun(Key, Acc) -> delete(Acc, Key) end).
update(Dict, Key, F) ->
case fetch(Dict, Key) of
{ok, Value} ->
put(Dict, Key, F({ok, Value}));
{error, _} ->
put(Dict, Key, F({error, not_found}))
end.
do_fold(List, Acc, F) ->
case List of
[] ->
Acc;
[{K, V} | Tail] ->
do_fold(Tail, F(K, V, Acc), F)
end.
fold(Dict, Acc, F) ->
Kvs = to_list(Dict),
do_fold(Kvs, Acc, F).
|