From 884c2669c433ac383c00e003cda66a1ac001d198 Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igloo@earth.li> Date: Fri, 14 Dec 2007 20:38:04 +0000 Subject: [PATCH] Fix freeze: It was trying to be safe, but in the end calling an unsafe function --- Data/Array/Base.hs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Data/Array/Base.hs b/Data/Array/Base.hs index 9e024320..fdeeac62 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) -- GitLab