Ticket #188: freezeex.2.hs

File freezeex.2.hs, 1.0 KB (added by nobody, 11 years ago)
Line 
1{-# OPTIONS -fglasgow-exts  #-}
2
3module Main where
4
5import IO
6import Array
7import Monad
8import Control.Monad.ST(runST,ST)
9import Data.Array.ST(STArray,writeArray,unsafeFreeze,thaw,unsafeThaw)
10
11
12
13prog4:: (Array Int Int) -> Int -> ST s (Array Int Int)
14prog4 a i = do am <- (unsafeThaw a:: ST s (STArray s Int Int))
15               --am <- (thaw a:: ST s (STArray s Int Int))
16               writeArray am i (42+i)
17               af <- unsafeFreeze am
18               return af
19
20default_len = 5000
21
22main ::IO ()
23main = do lens <- getLine
24          let len = if lens=="" then default_len else (read lens)
25          let a = listArray (0,len) [1..]
26          let b = runST (do foldM prog4 a [1..(len-2)])
27          putStr $ show [b!i | i <-[1..10]]
28          putStr $ show [b!(len-i) | i <-[1..10]]
29          putStr "\n"
30{-
31command line: 
32echo 5200 | ./freezeex
33
34ghc 5.04.1 -O
35  8000 result
36  8500 scavenge error
37  9000 seg. fault
38
39ghc 6.0.1, unoptimised
40  4000 result, 6'26" on Xeon 2.4
41  5230 result, 18'11"
42
43ghc 6.0.1 -O
44  -5218 result
45  5219-5221 result, segm. fault
46  5222- segm. fault
47
48-O2 same as -O
49-}
50
51