From ee03f5a0465e176e220060164a5ffc408f73ed0d Mon Sep 17 00:00:00 2001 From: Brett Snyder Date: Wed, 15 May 2019 07:22:03 -0500 Subject: optimize map:fold recursion --- src/map_dict.gleam | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/map_dict.gleam b/src/map_dict.gleam index c25378f..2ec141a 100644 --- a/src/map_dict.gleam +++ b/src/map_dict.gleam @@ -87,10 +87,14 @@ pub fn update(dict, key, f) { } } -pub fn fold(dict, acc, f) { - let kvs = to_list(dict) - case kvs { +fn do_fold(list, acc, f) { + case list { | [] -> acc - | [{k, v} | _] -> fold(delete(dict, k), f(k, v, acc), f) + | [{k, v} | tail] -> do_fold(tail, f(k, v, acc), f) } } + +pub fn fold(dict, acc, f) { + let kvs = to_list(dict) + do_fold(kvs, acc, f) +} -- cgit v1.2.3