@@ -1158,56 +1158,56 @@ 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
1168- -- | This version of 'delete' can be used on subtrees when a the
1168+ -- | This version of 'delete' can be used on a subtree when 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 -> case A. index# ary i of
11791179 (# ! st # ) ->
1180- case deleteFromSubtree h k (nextShift s) st of
1180+ case deleteFromSubtree (nextShift s) h k st of
11811181 Empty | A. length ary == 2
11821182 , (# l # ) <- A. index# ary (otherOfOneOrZero i)
11831183 , isLeafOrCollision l
11841184 -> l
11851185 | otherwise
11861186 -> BitmapIndexed (b .&. complement m) (A. delete ary i)
1187- st' | isLeafOrCollision st' && A. length ary == 1 -> st'
1188- | st' `ptrEq` st -> t
1187+ st' | st' `ptrEq` st -> t
1188+ | isLeafOrCollision st' && A. length ary == 1 -> st'
11891189 | 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) =
1190+ where m = mask h s
1191+ i = sparseIndex b m
1192+ t@ (Full ary) ->
11931193 case A. index# ary i of
11941194 (# ! st # ) ->
1195- case deleteFromSubtree h k (nextShift s) st of
1195+ case deleteFromSubtree (nextShift s) h k st of
11961196 Empty ->
11971197 let ary' = A. delete ary i
11981198 bm = fullBitmap .&. complement (1 `unsafeShiftL` i)
11991199 in BitmapIndexed bm ary'
12001200 st' | st' `ptrEq` st -> t
12011201 | otherwise -> Full (updateFullArray ary i st')
1202- where i = index h s
1203- deleteFromSubtree h k _ t@ (Collision hy v )
1202+ where i = index h s
1203+ t@ (Collision hy ary )
12041204 | h == hy
1205- , Just i <- indexOf k v
1206- = if A. length v == 2
1207- then case A. index# v (otherOfOneOrZero i) of
1208- (# l # ) -> Leaf h l
1209- else Collision h (A. delete v i)
1210- | otherwise = t
1205+ , Just i <- indexOf k ary
1206+ -> if A. length ary == 2
1207+ then case A. index# ary (otherOfOneOrZero i) of
1208+ (# l # ) -> Leaf h l
1209+ else Collision h (A. delete ary i)
1210+ | otherwise -> t
12111211{-# INLINABLE deleteFromSubtree #-}
12121212
12131213-- | Delete optimized for the case when we know the key is in the map.
@@ -1845,7 +1845,7 @@ difference = go_difference 0
18451845 go_difference s t1@ (Leaf h1 (L k1 _)) t2
18461846 = lookupCont (\ _ -> t1) (\ _ _ -> Empty ) h1 k1 s t2
18471847 go_difference _ t1 Empty = t1
1848- go_difference s t1 (Leaf h2 (L k2 _)) = deleteFromSubtree h2 k2 s t1
1848+ go_difference s t1 (Leaf h2 (L k2 _)) = deleteFromSubtree s h2 k2 t1
18491849
18501850 go_difference s t1@ (BitmapIndexed b1 ary1) (BitmapIndexed b2 ary2)
18511851 = differenceArrays s b1 ary1 t1 b2 ary2
0 commit comments