X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FArray%2FDiff.hs;fp=Data%2FArray%2FDiff.hs;h=6a598f1fb18d3f18d88649152813e65fbedf4123;hb=00ad3706672e7d739be53af26c345500e44b0d70;hp=515c2436fb37c672d2060659567ebaa5f91f75c4;hpb=bb71a716028ea0c4ae46fb8473a7ef6a4cdb4cfb;p=ghc-base.git diff --git a/Data/Array/Diff.hs b/Data/Array/Diff.hs index 515c243..6a598f1 100644 --- a/Data/Array/Diff.hs +++ b/Data/Array/Diff.hs @@ -80,7 +80,7 @@ import Data.Int ( Int8, Int16, Int32, Int64 ) import Data.Word ( Word, Word8, Word16, Word32, Word64) import System.IO.Unsafe ( unsafePerformIO ) -import Control.Concurrent ( MVar, newMVar, takeMVar, putMVar, readMVar ) +import Control.Concurrent.MVar ( MVar, newMVar, takeMVar, putMVar, readMVar ) ------------------------------------------------------------------------ -- Diff array types. @@ -307,7 +307,8 @@ boundsDiffArray a = do freezeDiffArray :: (MArray a e IO, Ix ix) => a ix e -> IO (IOToDiffArray a ix e) -freezeDiffArray a | (l,u) <- bounds a = do +freezeDiffArray a = case bounds a of + (l,u) -> do a' <- newArray_ (l,u) sequence_ [unsafeRead a i >>= unsafeWrite a' i | i <- [0 .. rangeSize (l,u) - 1]] var <- newMVar (Current a') @@ -338,7 +339,8 @@ thawDiffArray :: (MArray a e IO, Ix ix) thawDiffArray a = do d <- readMVar (varDiffArray a) case d of - Current a' | (l,u) <- bounds a' -> do + Current a' -> case bounds a' of + (l,u) -> do a'' <- newArray_ (l,u) sequence_ [unsafeRead a' i >>= unsafeWrite a'' i | i <- [0 .. rangeSize (l,u) - 1]] return a''