Search code examples
haskellpackagebenchmarkingghchaskell-criterion

Haskell Criterion Usage Error


The following code named fib.hs

import Criterion.Main (defaultMain)
fibZ = 1:1:zipWith (+) fibZ (tail fibZ)
main = defaultMain [
         bench "fibZ 10" $ \n -> fibZ (10+n-n)
       ]

errors with

fib.hs:45:10: Not in scope: `bench'

What is wrong? I have borrowed this example from here.


Solution

  • The library has changed since that blog post was written. Now you should write:

     import Criterion.Main
    
     fib :: Int -> Int
     fib 0 = 0
     fib 1 = 1
     fib n = fib (n-1) + fib (n-2)
    
     main = defaultMain [
            bgroup "fib" [ bench "fib 10" $ B fib 10
                         , bench "fib 35" $ B fib 35
                         , bench "fib 37" $ B fib 37
                         ]
                        ]
    

    This was taken directly from the "Running benchmarks" section of the Hackage documentation for Criterion.Main.