Skip to content

Commit 04d9198

Browse files
authored
Simplify Map minViewSure and maxViewSure (#1001)
This avoids allocations of MinView and MaxView, improving performance. Affected benchmarks include minView (-22%) and difference (-13%).
1 parent ddd130a commit 04d9198

File tree

1 file changed

+8
-14
lines changed

1 file changed

+8
-14
lines changed

containers/src/Data/Map/Internal.hs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4050,22 +4050,16 @@ data MinView k a = MinView !k a !(Map k a)
40504050
data MaxView k a = MaxView !k a !(Map k a)
40514051

40524052
minViewSure :: k -> a -> Map k a -> Map k a -> MinView k a
4053-
minViewSure = go
4054-
where
4055-
go k x Tip r = MinView k x r
4056-
go k x (Bin _ kl xl ll lr) r =
4057-
case go kl xl ll lr of
4058-
MinView km xm l' -> MinView km xm (balanceR k x l' r)
4059-
{-# NOINLINE minViewSure #-}
4053+
minViewSure !k x l !r = case l of
4054+
Tip -> MinView k x r
4055+
Bin _ lk lx ll lr -> case minViewSure lk lx ll lr of
4056+
MinView km xm l' -> MinView km xm (balanceR k x l' r)
40604057

40614058
maxViewSure :: k -> a -> Map k a -> Map k a -> MaxView k a
4062-
maxViewSure = go
4063-
where
4064-
go k x l Tip = MaxView k x l
4065-
go k x l (Bin _ kr xr rl rr) =
4066-
case go kr xr rl rr of
4067-
MaxView km xm r' -> MaxView km xm (balanceL k x l r')
4068-
{-# NOINLINE maxViewSure #-}
4059+
maxViewSure !k x !l r = case r of
4060+
Tip -> MaxView k x l
4061+
Bin _ rk rx rl rr -> case maxViewSure rk rx rl rr of
4062+
MaxView km xm r' -> MaxView km xm (balanceL k x l r')
40694063

40704064
-- | \(O(\log n)\). Delete and find the minimal element.
40714065
--

0 commit comments

Comments
 (0)