shows+foldrとshow+concat

どっちが速いのだろう、とか思ってふと実験してみた。

あ、そういやshowListってのもあったや。

showList(よくよくみたらこれshowsやん。

main :: IO ()
main = print $ (showList $ ([1..100000000]::[Int])) []

show + concat(個人的予想では一番遅そう

main :: IO ()
main = print $ concat $ map show $ ([1..100000000]::[Int])

shows + foldr(一番速そう。なんとなく。

main :: IO ()
main = print $ foldr ($) [] $ map shows $ ([1..100000000]::[Int])

で、実行結果。

$ time ./showList > /dev/null
82.10user 0.20system 1:22.36elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+701minor)pagefaults 0swaps

$ time ./show_concat > /dev/null
85.92user 0.28system 1:26.30elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+699minor)pagefaults 0swaps

$ time ./shows_fold > /dev/null
80.30user 0.18system 1:20.58elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+700minor)pagefaults 0swaps

んー。あまり違いなさげ?


ただ単に違いが出るようなテストパターンではないとか?
むぅ。よくわからん。
個人的にはもちっと違いでて良さそうな気がしないでもないのだけど...。
識者に意見を求む!