以下代码命名为fib.hs
import Criterion.Main (defaultMain)
fibZ = 1:1:zipWith (+) fibZ (tail fibZ)
main = defaultMain [
bench "fibZ 10" $ n -> fibZ (10+n-n)
]
与 错误
fib.hs:45:10: Not in scope: `bench'
怎么了?我从这里借用了这个例子
使用
import Criterion.Main
不是import Criterion.Main (defaultMain)
来自Criterion.Main
的函数bench
不在作用域中,因为您只导入defaultMain
。没有必要使用bgroup
。
下面是一个完整的工作示例:
import Criterion.Main
fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
main = defaultMain [
bench "fib 10" $ nf fib 10
, bench "fib 30" $ nf fib 30
, bench "fib 35" $ nf fib 35
]
如果你想知道这些nf
的东西是用来做什么的,看看这部分的文档
自从那篇博文发表以来,库已经发生了变化。现在你应该写:
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
]
]
这是直接取自criteria . main的Hackage文档中的"运行基准测试"部分