criterion
criterion copied to clipboard
please document that `nf` is (contains) an IO action
(I am not sure about this but it is a source of confusion in #273 )
We have
nf :: NFData b => (a -> b) -> a -> Benchmarkable
and Benchmarkable
is "A pure function or impure action that can be benchmarked." (says the haddock).
So what happens if I write this:
import Criterion.Main
main = defaultMain
$ let b = nf length [1 .. 10^7 :: Int ] in
[ bench "1" b
, bench "2" b
, bench "3" b
]
I do get the same timings - the value is shared, but the value denotes the action that performs the evaluation. (I think.)