Add dictionary method: pop.
[hope.git] / src / hope_kv_list.erl
index 468c8d8..ebc4176 100644 (file)
@@ -14,6 +14,7 @@
     , get/2
     , set/3
     , update/3
+    , pop/2
     , iter/2
     , map/2
     , filter/2
@@ -51,6 +52,12 @@ update(T, K, F) ->
     % 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).
@@ -79,8 +86,15 @@ of_kv_list(List) ->
 %% Helpers
 %% ============================================================================
 
+-spec lift_map(F) ->
+    G
+    when F :: fun(( K, V1 ) -> V2)
+       , G :: fun(({K, V1}) -> V2)
+       .
 lift_map(F) ->
     fun (X) -> apply_map(F, X) end.
 
+-spec apply_map(fun((K, V1) -> V2), {K, V1}) ->
+    V2.
 apply_map(F, {K, V}) ->
     F(K, V).
This page took 0.02232 seconds and 4 git commands to generate.