blob: 8527e5b2b1c95d321caf8936811cc95659248ed1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
{-# OPTIONS -XRecursiveDo -XScopedTypeVariables #-}
module Main(main) where
import Control.Monad.Fix
import Data.Array.IO
import Control.Monad
norm a = mdo (_, sz) <- getBounds a
s <- ioaA 1 s sz 0
return ()
where
ioaA i s sz acc
| i > sz = return acc
| True = do v <- readArray a i
writeArray a i (v / s)
ioaA (i+1) s sz $! (v + acc)
toList a = do (_, sz) <- getBounds a
mapM (\i -> readArray a i) [1..sz]
test :: Int -> IO ()
test sz = do
(arr :: IOArray Int Float) <- newArray (1, sz) 12
putStrLn "Before: "
toList arr >>= print
norm arr
putStrLn "After: "
lst <- toList arr
print lst
putStrLn ("Normalized sum: " ++ show (sum lst))
main = test 10
|