haskell - 在 Haskell 中使用标准

标签 haskell benchmarking haskell-criterion

我对 Haskell 很陌生。

我正在尝试使用 Criterion 来获取性能数据。我的主要模块如下:

module Main where
import SingleThreadedBlockChain
import Data.Time.Clock.System (getSystemTime)
import System.IO (readFile)
import System.TimeIt
import System.Environment ( getArgs )
import Criterion.Main

main :: IO ()
main = do
    args <- getArgs
    time <- getSystemTime
    content <- readFile (args !! 0)
    defaultMain [
      bench "putStrLn" $ nfIO (putStrLn ("The last block is " ++ show (last (makeBlockChain "" (lines content) 0 (show time)))))
     ]

我正在尝试使用 Criterion 文档以及我在 StackOverflow 上看到的内容来实现此功能。我收到以下错误:

Error: none of the specified names matches a benchmark

我以为我会进行 IO 基准测试。从我看到的示例来看,名称并不总是与基准匹配。有人可以解释一下这些名称应该如何与基准相关吗?

最佳答案

Criterion 的 defaultMain 进行自己的 cli 参数解析。它使用第一个参数来尝试匹配要运行的特定基准名称(在您的情况下,您只有 "putStrLn")。如果您想进行自己的参数解析,您可以在传递给 defaultMain 之前更改参数,如下所示:

args <- getArgs
withArgs (drop 1 args) $ defaultMain ...

这将隐藏 defaultMain 中的第一个参数,以便您可以随意使用它。

关于haskell - 在 Haskell 中使用标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66792723/

相关文章:

c - 如何可靠地比较 Haskell 和 C 的运行时间?

performance - 全局/本地环境影响 Haskell 的 Criterion 基准测试结果

haskell - 使用标准分析可执行文件

function - 将 2 个参数传递给 Haskell 中的函数

haskell - "exists"在 Haskell 类型系统中意味着什么?

testing - 在 golang 中运行没有 "go test"的基准测试

python - 为什么在 C++ 中从标准输入读取行比 Python 慢得多?

haskell - 获取列表列表并生成替换一个元素的所有变体

haskell - Haskell 异步如何在中断后可靠地运行清理操作?

python - 用其前后值之间的线性插值替换 numpy 数组中的零