Haskell准则使用错误

Haskell准则使用错误,haskell,package,benchmarking,ghc,criterion,Haskell,Package,Benchmarking,Ghc,Criterion,以下代码名为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' 怎么了?我从中借用了这个例子。自那篇博客文章撰写以来,图书馆已经发生了变化。现在

以下代码名为
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

 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
                     ]
                    ]

这篇文章直接取自《运行基准测试》一节。

自那篇博文发表以来,该库已经发生了变化。现在你应该写:

 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
                     ]
                    ]
这是直接从“运行基准测试”部分获取的。

使用

import Criterion.Main
而不是

import Criterion.Main (defaultMain)
criterian.Main
中的函数不在范围内,因为您只导入了
defaultMain
。不需要使用
b组

下面是一个完整的工作示例:

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
而不是

import Criterion.Main (defaultMain)
criterian.Main
中的函数不在范围内,因为您只导入了
defaultMain
。不需要使用
b组

下面是一个完整的工作示例:

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
东西是干什么用的,请查看文档的一部分。

您的代码错误为
fib.hs:53:37:不在范围内:数据构造函数
B'失败,模块加载:无。抱歉,我对Haskell真的很陌生。你可能在谈论Jeremy的代码——他从文档页面复制粘贴了他的示例,以获得旧版本的Criteria。我的编译没有错误。唉,现在代码加载了,但是当我调用main:
load package double-conversion-0.2.0.1。。。无法加载.so/.DLL for:stdc++(libstdc++.so:无法打开共享对象文件:没有这样的文件或目录)
。我在Ubuntu11.10上使用GHC7.0.4。我认为这是一个已知的错误-幸运的是,只有当您尝试在GHCi中运行程序时才会发生这种情况。尝试编译(使用
ghc--make-O2
)。我最初的猜测是对的——您有一个旧版本的gtk2hs构建工具,既然如此,您应该手动更新它们。执行
cabal安装gtk2hs构建工具
,然后
cabal安装--重新安装Criteria-fChart-fgtk
。我的代码错误为
fib.hs:53:37:不在范围内:数据构造函数
B'失败,模块加载:无。抱歉,我对Haskell真的很陌生。你可能在谈论Jeremy的代码——他从文档页面复制粘贴了他的示例,以获得旧版本的Criteria。我的编译没有错误。唉,现在代码加载了,但是当我调用main:
load package double-conversion-0.2.0.1。。。无法加载.so/.DLL for:stdc++(libstdc++.so:无法打开共享对象文件:没有这样的文件或目录)
。我在Ubuntu11.10上使用GHC7.0.4。我认为这是一个已知的错误-幸运的是,只有当您尝试在GHCi中运行程序时才会发生这种情况。尝试编译(使用
ghc--make-O2
)。我最初的猜测是对的——您有一个旧版本的gtk2hs构建工具,既然如此,您应该手动更新它们。执行
cabal安装gtk2hs构建工具,然后
cabal安装-重新安装Criteria-fChart-fgtk