追記
main = do seed <- newStdGen timePrint "loop" 0 $ foo seed -- 適当に定義した時間計測関数 where foo seed = seq d $ return () where d = foldl' (+) 0 $ take 1000000 $ randomRs (0,127) seed :: Int
このようなコードを書いて
配列アクセス以外のオーバーヘッドを計ってみたところ、
$ ./a.out loop : 2.28299 sec.
このようになった。
これを考えるとData.Arrayはかなり高速だということがわかる。
100万回で数十ms、1回当たり数十nsなので、
PentiumM1Ghz上で実行していることを考えると数十クロックで
アクセスできていることになる。
反面IOUArrayは数百クロックかかっているようである。