import Data.Array.Unboxed (listArray,Array,UArray,(!)) import Data.IORef (IORef,newIORef,readIORef,writeIORef,modifyIORef) import Data.Ix main = do let len = 3 putStrLn "print a" putStrLn "print updated a" forM_ [0..len] $ \i -> do v <- readArray a i print v rx <- newIORef (123 :: Int64) x <- readIORef rx -- copy value, not reference putStr "x " print x -- 123 writeIORef rx 999 putStr "x " print x -- 123 x <- readIORef rx putStr "x " print x -- 999 foo <- fooArray putStrLn "print foo" putStrLn "print updated foo" bar <- fooArray putStrLn "print bar" (primes, isPrime) <- primeTool (10^8) arr <- genIntArray 10 0 table <- genMatrix 5 5 0 forM_ [0..4] $ \i -> do forM_ [0..4] $ \j -> do writeIORef (table!i!j) (i*100+j) genIntArray n initv = genArray n (newIORef initv) genMatrix n m initv = genArray n (genArray m (newIORef initv)) primeTool n = do primes <- newIORef [3,2] let x = 6*i - 1 r <- readArray table x unless r $ do modifyIORef primes (x:) writeArray table (k*x) True let y = x + 2 q <- readArray table y unless q $ do modifyIORef primes (y:) writeArray table (k*y) True writeArray table (y+2) True writeArray table 1 True
Standard input is empty
print a 0 0 0 0 print updated a 2 4 6 8 x 123 x 123 x 999 print foo [0,0,0,0] print updated foo [2,4,6,8] print bar [0,0,0,0] [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113] [10000019,10000079,10000103,10000121,10000139,10000141,10000169,10000189,10000223,10000229,10000247,10000253,10000261,10000271] [0,1,3,6,10,15,21,28,36,45] [[0,1,2,3,4],[100,101,102,103,104],[200,201,202,203,204],[300,301,302,303,304],[400,401,402,403,404]]