-callback update(t(K, V), K, fun((hope_option:t(V)) -> V)) ->
t(K, V).
+-callback pop(t(K, V), K) ->
+ {hope_option:t(V), t(K, V)}.
+
-callback map(t(K, V), fun((K, V) -> V)) ->
t(K, V).
, get/2
, set/3
, update/3
+ , pop/2
, iter/2
, map/2
, filter/2
% TODO: Eliminate the 2nd lookup.
set(T, K, V2).
+pop(T1, K) ->
+ case lists:keytake(K, 1, T1)
+ of {value, {K, V}, T2} -> {{some, V}, T2}
+ ; false -> {none , T1}
+ end.
+
iter(T, F1) ->
F2 = lift_map(F1),
lists:foreach(F2, T).
-export(
[ t_set_new/1
, t_set_existing/1
+ , t_pop/1
]).
Tests =
[ t_set_new
, t_set_existing
+ , t_pop
],
Properties = [],
[{?GROUP_KV_LIST, Properties, Tests}].
ListResulting = hope_kv_list:set(ListInitial, Key, ValExpected),
{some, ValResulting} = hope_kv_list:get(ListResulting, Key),
ValResulting = ValExpected.
+
+t_pop(_Config) ->
+ KVList = [{a, 1}, {b, 2}, {c, 3}],
+ Dict1 = hope_kv_list:of_kv_list(KVList),
+ {{some, 1}, Dict2} = hope_kv_list:pop(Dict1, a),
+ {none , _Dict3} = hope_kv_list:pop(Dict2, a).