
On Sat, Sep 25, 2010 at 5:12 PM, Bas van Dijk
I'll see if I can make some Criterion benchmarks to see if it's actually faster.
And it's faster indeed: ------------------------------------------------------------------------------------------------------ import Control.Exception import Prelude hiding (catch) import Criterion.Main throws :: Int -> IO () throws 0 = return () throws n = throw DivideByZero `catch` \DivideByZero -> throws (n-1) throwIOs :: Int -> IO () throwIOs 0 = return () throwIOs n = throwIO DivideByZero `catch` \DivideByZero -> throws (n-1) n :: Int n = 1000000 main = defaultMain [ bench "throw" (throws n) , bench "throwIO" (throwIOs n) ] ------------------------------------------------------------------------------------------------------ $ ghc --make Throwing.hs -O2 -o throwing [1 of 1] Compiling Main ( Throwing.hs, Throwing.o ) Linking throwing ... $ ./throwing warming up estimating clock resolution... mean is 24.38796 us (40001 iterations) found 1669 outliers among 39999 samples (4.2%) 1 (2.5e-3%) low severe 1446 (3.6%) high severe estimating cost of a clock call... mean is 1.814127 us (46 iterations) found 7 outliers among 46 samples (15.2%) 5 (10.9%) high mild 2 (4.3%) high severe benchmarking throw collecting 100 samples, 1 iterations each, in estimated 21.14298 s bootstrapping with 100000 resamples mean: 207.5380 ms, lb 207.1919 ms, ub 207.9817 ms, ci 0.950 std dev: 2.002210 ms, lb 1.645117 ms, ub 2.496120 ms, ci 0.950 found 6 outliers among 100 samples (6.0%) 5 (5.0%) high mild 1 (1.0%) high severe variance introduced by outliers: 0.990% variance is unaffected by outliers benchmarking throwIO collecting 100 samples, 1 iterations each, in estimated 20.68932 s bootstrapping with 100000 resamples mean: 211.1240 ms, lb 210.8239 ms, ub 211.5199 ms, ci 0.950 std dev: 1.752349 ms, lb 1.389534 ms, ub 2.311696 ms, ci 0.950 found 9 outliers among 100 samples (9.0%) 5 (5.0%) high mild 4 (4.0%) high severe variance introduced by outliers: 0.990% variance is unaffected by outliers Regards, Bas