diff --git a/Data/Array/Base.hs b/Data/Array/Base.hs index 9e0243200b4f163e3ad4edc2cf7f509ff45e9982..fdeeac621265a5e62b6e01cee6701313a9a05641 100644 --- a/Data/Array/Base.hs +++ b/Data/Array/Base.hs @@ -1680,12 +1680,10 @@ freeze :: (Ix i, MArray a e m, IArray b e) => a i e -> m (b i e) freeze marr = do (l,u) <- getBounds marr n <- getNumElements marr - ies <- sequence [do e <- unsafeRead marr i; return (i,e) - | i <- [0 .. n - 1]] - -- The old array may be lying about the number of elements in - -- (l,u), so recalculate it to be safe. - let n' = safeRangeSize (l,u) - return (unsafeArray (l,u) ies) + es <- mapM (unsafeRead marr) [0 .. n - 1] + -- The old array and index might not be well-behaved, so we need to + -- use the safe array creation function here. + return (listArray (l,u) es) #ifdef __GLASGOW_HASKELL__ freezeSTUArray :: Ix i => STUArray s i e -> ST s (UArray i e)