From 63809540ef0a5c97ad9a1c2073e1cf07cc30af89 Mon Sep 17 00:00:00 2001 From: Simon Jakobi Date: Thu, 4 Jun 2026 02:03:54 +0200 Subject: [PATCH] Remove redundant length check in sameArray1 Both call sites (equal1 and equalKeys) only compare arrays whose lengths are already known to be equal: BitmapIndexed comparisons are guarded by equal bitmaps (equal popCount, hence equal array length), and Full nodes always hold maxChildren elements. Fixes #465. Co-Authored-By: Claude Opus 4.7 --- Data/HashMap/Internal/Array.hs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Data/HashMap/Internal/Array.hs b/Data/HashMap/Internal/Array.hs index dd9f8174..9432a61d 100644 --- a/Data/HashMap/Internal/Array.hs +++ b/Data/HashMap/Internal/Array.hs @@ -141,10 +141,9 @@ unsafeSameArray :: Array a -> Array b -> Bool unsafeSameArray (Array xs) (Array ys) = tagToEnum# (unsafeCoerce# reallyUnsafePtrEquality# xs ys) +-- | Precondition: the two arrays have the same length. This is not checked. sameArray1 :: (a -> b -> Bool) -> Array a -> Array b -> Bool -sameArray1 eq !xs0 !ys0 - | lenxs /= lenys = False - | otherwise = go 0 xs0 ys0 +sameArray1 eq !xs0 !ys0 = go 0 xs0 ys0 where go !k !xs !ys | k == lenxs = True @@ -153,7 +152,6 @@ sameArray1 eq !xs0 !ys0 = eq x y && go (k + 1) xs ys !lenxs = length xs0 - !lenys = length ys0 length :: Array a -> Int length ary = I# (sizeofSmallArray# (unArray ary))