fix Data.Map.updateAt
authorBertram Felgenhauer <int-e@gmx.de>
Wed, 18 Jul 2007 15:03:40 +0000 (15:03 +0000)
committerBertram Felgenhauer <int-e@gmx.de>
Wed, 18 Jul 2007 15:03:40 +0000 (15:03 +0000)
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.

Data/Map.hs

index 399f74c..b8fcf71 100644 (file)
@@ -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