From: Bertram Felgenhauer Date: Wed, 18 Jul 2007 15:03:40 +0000 (+0000) Subject: fix Data.Map.updateAt X-Git-Tag: 2007-09-13~45 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=8918a2b6c01d749f6b606ae86133ac376edb9323;p=ghc-base.git fix Data.Map.updateAt See http://haskell.org/pipermail/libraries/2007-July/007785.html for a piece of code triggering the bug. updateAt threw away parts of the tree making up the map. --- diff --git a/Data/Map.hs b/Data/Map.hs index 399f74c..b8fcf71 100644 --- a/Data/Map.hs +++ b/Data/Map.hs @@ -523,8 +523,8 @@ updateAt :: (k -> a -> Maybe a) -> Int -> Map k a -> Map k a updateAt f i Tip = error "Map.updateAt: index out of range" updateAt f i (Bin sx kx x l r) = case compare i sizeL of - LT -> updateAt f i l - GT -> updateAt f (i-sizeL-1) r + LT -> balance kx x (updateAt f i l) r + GT -> balance kx x l (updateAt f (i-sizeL-1) r) EQ -> case f kx x of Just x' -> Bin sx kx x' l r Nothing -> glue l r