ベンチマークのための時間計測関数

30分プログラム、その541。ベンチマークのための時間計測関数を書いてみた。
http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_102にあるようにビルトインの関数とオレ関数の速度を比較しようと思ったけれど、そのための時間測定のほうが面倒くさいことに気がついた。
もちろんシェルでtime hogehogeとやれば簡単だけど、あえてHaskellの関数でやろうとがんばってみた。が、結局、好きなタイミングで評価させることができなくて、無駄なprintが入ってる。
ちなみにビルトインのほうが100倍ぐらい速かったです。

使い方

*Main> bench (\_ -> print $ length $ sort [1..1000])
1000
0.003578s

ソースコード

import Data.List
import Data.Time.Clock


bench f = do from  <- getCurrentTime
             _     <- f ()
             to    <- getCurrentTime
             return $ to `diffUTCTime` from
mySort [] =[]
mySort (x:xs) =  mySort [y | y <- xs, y < x] ++ [x] ++ mySort [y | y <- xs, y > x]

benchSort n = bench (\_ -> print $ length $ sort [1..n])
benchMySort n = bench (\_ -> print $ length $ mySort [1..n])