From f013ce950ccddb254c83dfa3629e151dc728b8ab Mon Sep 17 00:00:00 2001 From: Simon Jakobi Date: Wed, 2 Mar 2022 19:27:17 +0100 Subject: [PATCH] Tweak Array.deleteM --- Data/HashMap/Internal/Array.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Data/HashMap/Internal/Array.hs b/Data/HashMap/Internal/Array.hs index 00010bc8..a35ffae0 100644 --- a/Data/HashMap/Internal/Array.hs +++ b/Data/HashMap/Internal/Array.hs @@ -422,13 +422,13 @@ delete ary idx = runST (deleteM ary idx) -- | /O(n)/ Delete an element at the given position in this array, -- decreasing its size by one. deleteM :: Array e -> Int -> ST s (Array e) -deleteM ary idx = do +deleteM ary0 idx = do CHECK_BOUNDS("deleteM", count, idx) - do mary <- new_ (count-1) - copy ary 0 mary 0 idx - copy ary (idx+1) mary idx (count-(idx+1)) - unsafeFreeze mary - where !count = length ary + do mary0 <- unsafeThaw ary0 + mary1 <- cloneM mary0 0 (count-1) + copy ary0 (idx+1) mary1 idx (count-(idx+1)) + unsafeFreeze mary1 + where !count = length ary0 {-# INLINE deleteM #-} map :: (a -> b) -> Array a -> Array b