criterion icon indicating copy to clipboard operation
criterion copied to clipboard

please document that `nf` is (contains) an IO action

Open jwaldmann opened this issue 1 year ago • 0 comments

(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.)

jwaldmann avatar Mar 26 '23 17:03 jwaldmann