@@ -1056,17 +1056,17 @@ insertModifying x f k0 m0 = go h0 k0 0 m0
10561056-- | Like insertModifying for arrays; used to implement insertModifying
10571057insertModifyingArr :: Eq k => v -> (v -> (# v # )) -> k -> A. Array (Leaf k v )
10581058 -> A. Array (Leaf k v )
1059- insertModifyingArr x f k0 ary0 = go k0 ary0 0 (A. length ary0)
1059+ insertModifyingArr x f k0 ary0 = go k0 ary0 (A. length ary0 - 1 )
10601060 where
1061- go ! k ! ary ! i ! n
1061+ go ! k ! ary ! i
10621062 -- Not found, append to the end.
1063- | i >= n = A. snoc ary $ L k x
1063+ | i < 0 = A. snoc ary $ L k x
10641064 | otherwise = case A. index ary i of
10651065 (L kx y) | k == kx -> case f y of
10661066 (# y' # ) -> if ptrEq y y'
10671067 then ary
10681068 else A. update ary i (L k y')
1069- | otherwise -> go k ary (i+ 1 ) n
1069+ | otherwise -> go k ary (i- 1 )
10701070{-# INLINE insertModifyingArr #-}
10711071
10721072-- | In-place update version of insertWith
@@ -2309,41 +2309,41 @@ fromListWithKey f = List.foldl' (\ m (k, v) -> unsafeInsertWithKey (\k' a b -> (
23092309lookupInArrayCont ::
23102310 forall rep (r :: TYPE rep ) k v .
23112311 Eq k => ((# # ) -> r ) -> (v -> Int -> r ) -> k -> A. Array (Leaf k v ) -> r
2312- lookupInArrayCont absent present k0 ary0 = go k0 ary0 0 (A. length ary0)
2312+ lookupInArrayCont absent present k0 ary0 = go k0 ary0 (A. length ary0 - 1 )
23132313 where
2314- go :: Eq k => k -> A. Array (Leaf k v ) -> Int -> Int -> r
2315- go ! k ! ary ! i ! n
2316- | i >= n = absent (# # )
2314+ go :: Eq k => k -> A. Array (Leaf k v ) -> Int -> r
2315+ go ! k ! ary ! i
2316+ | i < 0 = absent (# # )
23172317 | otherwise = case A. index ary i of
23182318 (L kx v)
23192319 | k == kx -> present v i
2320- | otherwise -> go k ary (i+ 1 ) n
2320+ | otherwise -> go k ary (i- 1 )
23212321{-# INLINE lookupInArrayCont #-}
23222322
23232323-- | \(O(n)\) Lookup the value associated with the given key in this
23242324-- array. Returns 'Nothing' if the key wasn't found.
23252325indexOf :: Eq k => k -> A. Array (Leaf k v ) -> Maybe Int
2326- indexOf k0 ary0 = go k0 ary0 0 (A. length ary0)
2326+ indexOf k0 ary0 = go k0 ary0 (A. length ary0 - 1 )
23272327 where
2328- go ! k ! ary ! i ! n
2329- | i >= n = Nothing
2328+ go ! k ! ary ! i
2329+ | i < 0 = Nothing
23302330 | otherwise = case A. index ary i of
23312331 (L kx _)
23322332 | k == kx -> Just i
2333- | otherwise -> go k ary (i+ 1 ) n
2333+ | otherwise -> go k ary (i- 1 )
23342334{-# INLINABLE indexOf #-}
23352335
23362336updateWith# :: Eq k => (v -> (# v # )) -> k -> A. Array (Leaf k v ) -> A. Array (Leaf k v )
2337- updateWith# f k0 ary0 = go k0 ary0 0 (A. length ary0)
2337+ updateWith# f k0 ary0 = go k0 ary0 (A. length ary0 - 1 )
23382338 where
2339- go ! k ! ary ! i ! n
2340- | i >= n = ary
2339+ go ! k ! ary ! i
2340+ | i < 0 = ary
23412341 | otherwise = case A. index ary i of
23422342 (L kx y) | k == kx -> case f y of
23432343 (# y' # )
23442344 | ptrEq y y' -> ary
23452345 | otherwise -> A. update ary i (L k y')
2346- | otherwise -> go k ary (i+ 1 ) n
2346+ | otherwise -> go k ary (i- 1 )
23472347{-# INLINABLE updateWith# #-}
23482348
23492349updateOrSnocWith :: Eq k => (v -> v -> (# v # )) -> k -> v -> A. Array (Leaf k v )
@@ -2353,17 +2353,17 @@ updateOrSnocWith f = updateOrSnocWithKey (const f)
23532353
23542354updateOrSnocWithKey :: Eq k => (k -> v -> v -> (# v # )) -> k -> v -> A. Array (Leaf k v )
23552355 -> A. Array (Leaf k v )
2356- updateOrSnocWithKey f k0 v0 ary0 = go k0 v0 ary0 0 (A. length ary0)
2356+ updateOrSnocWithKey f k0 v0 ary0 = go k0 v0 ary0 (A. length ary0 - 1 )
23572357 where
2358- go ! k v ! ary ! i ! n
2358+ go ! k v ! ary ! i
23592359 -- Not found, append to the end.
2360- | i >= n = A. snoc ary $ L k v
2360+ | i < 0 = A. snoc ary $ L k v
23612361 | L kx y <- A. index ary i
23622362 , k == kx
23632363 , (# v2 # ) <- f k v y
23642364 = A. update ary i (L k v2)
23652365 | otherwise
2366- = go k v ary (i+ 1 ) n
2366+ = go k v ary (i- 1 )
23672367{-# INLINABLE updateOrSnocWithKey #-}
23682368
23692369updateOrConcatWithKey :: Eq k => (k -> v -> v -> (# v # )) -> A. Array (Leaf k v ) -> A. Array (Leaf k v ) -> A. Array (Leaf k v )
0 commit comments