@@ -95,7 +95,7 @@ fn from_list_loop(
9595) -> Dict ( k, v) {
9696 case list {
9797 [ ] -> initial
98- [ x , .. rest ] -> from_list_loop ( rest , insert ( initial , x . 0 , x . 1 ) )
98+ [ # ( key , value ) , .. rest ] -> from_list_loop ( rest , insert ( initial , key , value ) )
9999 }
100100}
101101
@@ -210,21 +210,20 @@ fn do_map_values(f: fn(k, v) -> a, dict: Dict(k, v)) -> Dict(k, a) {
210210///
211211@ external ( erlang , "maps" , "keys" )
212212pub fn keys ( dict : Dict ( k, v) ) -> List ( k) {
213- let list_of_pairs = to_list ( dict )
214- do_keys_loop ( list_of_pairs , [ ] )
215- }
216-
217- fn reverse_and_concat ( remaining : List ( a) , accumulator : List ( a) ) -> List ( a) {
218- case remaining {
219- [ ] -> accumulator
220- [ item , .. rest ] -> reverse_and_concat ( rest , [ item , .. accumulator ] )
221- }
213+ do_keys_loop ( to_list ( dict ) , [ ] )
222214}
223215
224216fn do_keys_loop ( list : List ( # ( k, v) ) , acc : List ( k) ) -> List ( k) {
225217 case list {
226218 [ ] -> reverse_and_concat ( acc , [ ] )
227- [ first , .. rest ] -> do_keys_loop ( rest , [ first . 0 , .. acc ] )
219+ [ # ( key , _value ) , .. rest ] -> do_keys_loop ( rest , [ key , .. acc ] )
220+ }
221+ }
222+
223+ fn reverse_and_concat ( remaining : List ( a) , accumulator : List ( a) ) -> List ( a) {
224+ case remaining {
225+ [ ] -> accumulator
226+ [ first , .. rest ] -> reverse_and_concat ( rest , [ first , .. accumulator ] )
228227 }
229228}
230229
@@ -250,7 +249,7 @@ pub fn values(dict: Dict(k, v)) -> List(v) {
250249fn do_values_loop ( list : List ( # ( k, v) ) , acc : List ( v) ) -> List ( v) {
251250 case list {
252251 [ ] -> reverse_and_concat ( acc , [ ] )
253- [ first , .. rest ] -> do_values_loop ( rest , [ first . 1 , .. acc ] )
252+ [ # ( _key , value ) , .. rest ] -> do_values_loop ( rest , [ value , .. acc ] )
254253 }
255254}
256255
@@ -283,7 +282,7 @@ fn do_filter(f: fn(k, v) -> Bool, dict: Dict(k, v)) -> Dict(k, v) {
283282 let insert = fn ( dict , k , v ) {
284283 case f ( k , v ) {
285284 True -> insert ( dict , k , v )
286- _ -> dict
285+ False -> dict
287286 }
288287 }
289288
@@ -324,7 +323,7 @@ fn do_take_loop(
324323 let insert = fn ( taken , key ) {
325324 case get ( dict , key ) {
326325 Ok ( value ) -> insert ( taken , key , value )
327- _ -> taken
326+ Error ( _ ) -> taken
328327 }
329328 }
330329 case desired_keys {
@@ -354,17 +353,17 @@ pub fn merge(into dict: Dict(k, v), from new_entries: Dict(k, v)) -> Dict(k, v)
354353 |> fold_inserts ( dict )
355354}
356355
357- fn insert_pair ( dict : Dict ( k, v) , pair : # ( k, v) ) -> Dict ( k, v) {
358- insert ( dict , pair . 0 , pair . 1 )
359- }
360-
361356fn fold_inserts ( new_entries : List ( # ( k, v) ) , dict : Dict ( k, v) ) -> Dict ( k, v) {
362357 case new_entries {
363358 [ ] -> dict
364359 [ first , .. rest ] -> fold_inserts ( rest , insert_pair ( dict , first ) )
365360 }
366361}
367362
363+ fn insert_pair ( dict : Dict ( k, v) , pair : # ( k, v) ) -> Dict ( k, v) {
364+ insert ( dict , pair . 0 , pair . 1 )
365+ }
366+
368367/// Creates a new dict from a given dict with all the same entries except for the
369368/// one with a given key, if it exists.
370369///
@@ -443,11 +442,10 @@ pub fn upsert(
443442 update key : k,
444443 with fun : fn ( Option ( v) ) -> v,
445444) -> Dict ( k, v) {
446- dict
447- |> get ( key )
448- |> option . from_result
449- |> fun
450- |> insert ( dict , key , _)
445+ case get ( dict , key ) {
446+ Ok ( value ) -> insert ( dict , key , fun ( option . Some ( value ) ) )
447+ Error ( _ ) -> insert ( dict , key , fun ( option . None ) )
448+ }
451449}
452450
453451/// Combines all entries into a single value by calling a given function on each
0 commit comments