import qualified Data.Vector.Mutable as MV import Data.IORef import Control.Monad test1 n = do sum <- newIORef (0 :: Int) v <- MV.new (n+1) forM_ [0..n] $ \i ->do MV.write v i i forM_ [0..n] $ \i ->do MV.read v i >>= writeIORef sum readIORef sum test2 n = do sum <- newIORef (0 :: Int) vec <- MV.new (n+1) >>= newIORef forM_ [0..n] $ \i ->do v <- readIORef vec MV.write v i i forM_ [0..n] $ \i ->do v <- readIORef vec MV.read v i >>= writeIORef sum readIORef sum main = do test1 1000000 >>= print