Haskell标准使用错误

Nor*_*löw 1 benchmarking haskell package ghc haskell-criterion

以下代码命名 fib.hs

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

错误

fib.hs:45:10: Not in scope: `bench'
Run Code Online (Sandbox Code Playgroud)

怎么了?我从这里借了这个例子.

Mik*_*kov 8

使用

import Criterion.Main
Run Code Online (Sandbox Code Playgroud)

代替

import Criterion.Main (defaultMain)
Run Code Online (Sandbox Code Playgroud)

函数benchfrom Criterion.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
       ]
Run Code Online (Sandbox Code Playgroud)

如果您想知道这些nf内容是什么,请查看文档的这一部分.