@@ -1158,26 +1158,27 @@ unsafeInsertWithKey f k0 v0 m0 = runST (go h0 k0 v0 0 m0)
11581158-- | \(O(\log n)\) Remove the mapping for the specified key from this map
11591159-- if present.
11601160delete :: Hashable k => k -> HashMap k v -> HashMap k v
1161- delete k m = delete' (hash k) k m
1162- {-# INLINABLE delete #-}
1161+ delete k = delete' (hash k) k
1162+ {-# INLINE delete #-}
11631163
11641164delete' :: Eq k => Hash -> k -> HashMap k v -> HashMap k v
1165- delete' h0 k0 m0 = deleteFromSubtree h0 k0 0 m0
1166- {-# INLINABLE delete' #-}
1165+ delete' = deleteFromSubtree 0
1166+ {-# INLINE delete' #-}
11671167
11681168-- | This version of 'delete' can be used on subtrees when a the
11691169-- corresponding 'Shift' argument is supplied.
1170- deleteFromSubtree :: Eq k => Hash -> k -> Shift -> HashMap k v -> HashMap k v
1171- deleteFromSubtree ! _ ! _ ! _ Empty = Empty
1172- deleteFromSubtree h k _ t@ (Leaf hy (L ky _))
1173- | hy == h && ky == k = Empty
1174- | otherwise = t
1175- deleteFromSubtree h k s t@ (BitmapIndexed b ary)
1176- | b .&. m == 0 = t
1177- | otherwise
1178- = case A. index# ary i of
1170+ deleteFromSubtree :: Eq k => Shift -> Hash -> k -> HashMap k v -> HashMap k v
1171+ deleteFromSubtree ! s ! h ! k = \ case
1172+ Empty -> Empty
1173+ t@ (Leaf hy (L ky _))
1174+ | hy == h && ky == k -> Empty
1175+ | otherwise -> t
1176+ t@ (BitmapIndexed b ary)
1177+ | b .&. m == 0 -> t
1178+ | otherwise ->
1179+ case A. index# ary i of
11791180 (# ! st # ) ->
1180- case deleteFromSubtree h k (nextShift s) st of
1181+ case deleteFromSubtree (nextShift s) h k st of
11811182 Empty | A. length ary == 2
11821183 , (# l # ) <- A. index# ary (otherOfOneOrZero i)
11831184 , isLeafOrCollision l
@@ -1187,27 +1188,27 @@ deleteFromSubtree h k s t@(BitmapIndexed b ary)
11871188 st' | isLeafOrCollision st' && A. length ary == 1 -> st'
11881189 | st' `ptrEq` st -> t
11891190 | otherwise -> BitmapIndexed b (A. update ary i st')
1190- where m = mask h s
1191- i = sparseIndex b m
1192- deleteFromSubtree h k s t@ (Full ary) =
1191+ where m = mask h s
1192+ i = sparseIndex b m
1193+ t@ (Full ary) ->
11931194 case A. index# ary i of
11941195 (# ! st # ) ->
1195- case deleteFromSubtree h k (nextShift s) st of
1196+ case deleteFromSubtree (nextShift s) h k st of
11961197 Empty ->
11971198 let ary' = A. delete ary i
11981199 bm = fullBitmap .&. complement (1 `unsafeShiftL` i)
11991200 in BitmapIndexed bm ary'
12001201 st' | st' `ptrEq` st -> t
12011202 | otherwise -> Full (updateFullArray ary i st')
1202- where i = index h s
1203- deleteFromSubtree h k _ t@ (Collision hy v)
1203+ where i = index h s
1204+ t@ (Collision hy v)
12041205 | h == hy
12051206 , Just i <- indexOf k v
1206- = if A. length v == 2
1207+ -> if A. length v == 2
12071208 then case A. index# v (otherOfOneOrZero i) of
12081209 (# l # ) -> Leaf h l
12091210 else Collision h (A. delete v i)
1210- | otherwise = t
1211+ | otherwise -> t
12111212{-# INLINABLE deleteFromSubtree #-}
12121213
12131214-- | Delete optimized for the case when we know the key is in the map.
@@ -1845,7 +1846,7 @@ difference = go_difference 0
18451846 go_difference s t1@ (Leaf h1 (L k1 _)) t2
18461847 = lookupCont (\ _ -> t1) (\ _ _ -> Empty ) h1 k1 s t2
18471848 go_difference _ t1 Empty = t1
1848- go_difference s t1 (Leaf h2 (L k2 _)) = deleteFromSubtree h2 k2 s t1
1849+ go_difference s t1 (Leaf h2 (L k2 _)) = deleteFromSubtree s h2 k2 t1
18491850
18501851 go_difference s t1@ (BitmapIndexed b1 ary1) (BitmapIndexed b2 ary2)
18511852 = differenceArrays s b1 ary1 t1 b2 ary2
0 commit comments