Ticket #4943: STUArray-Rewrite2.hs

File STUArray-Rewrite2.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
7main :: IO ()
8main = do
9  [_nr, _len] <- getArgs
10  let nRounds = read _nr :: Int
11      len = read _len :: Int
12  stToIO $ do
13    arr <- newArray (1, len) 0
14   
15    let spin :: STUArray s Int Int -> Int -> Int -> Int -> ST s ()
16        spin _   r i n | i > n = return ()
17        spin arr r i n = do x <- unsafeRead arr i
18                            unsafeWrite arr i $ x + r
19                            spin arr r (i + 1) n
20       
21        loop :: STUArray s Int Int -> Int -> ST s ()
22        loop _   r | r > nRounds = return ()
23        loop arr r = do
24            k <- getNumElements arr
25            spin arr r 0 (k - 1)
26            loop arr (r + 1)
27   
28    loop arr 1