以下代码命名为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)
函数bench
fromCriterion.Main
不在范围内,因为您只导入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
]
]
这直接取自Criterion.Main 的 Hackage 文档的“运行基准测试”部分。