Ticket #4908: STUArray.hs

File STUArray.hs, 0.8 KB (added by batterseapower, 2 years ago)
Line 
1import Data.Int
2import Data.Array.Base
3import Data.Array.ST
4import Control.Monad.ST
5import System.Environment
6
7update :: Int -> Int -> Int
8update orig round = orig + round
9
10incrArray :: STUArray s Int Int -> Int -> ST s ()
11incrArray arr round = do k <- getNumElements arr
12                         spin 0 (k - 1)
13  where spin i n | i > n = return ()
14        spin i n = do x <- unsafeRead arr i
15                      unsafeWrite arr i $ update x round
16                      spin (i + 1) n
17
18main :: IO ()
19main = do
20  [_nr, _len] <- getArgs
21  let nRounds = read _nr :: Int
22      len = read _len :: Int
23      loop :: STUArray s Int Int -> Int -> ST s ()
24      loop arr r | r > nRounds = return ()
25      loop arr r = incrArray arr r >> loop arr (r + 1)
26  stToIO $ do
27    arr <- newArray (1, len) 0 :: ST s (STUArray s Int Int)
28    loop arr 1