1

我对 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 进行基准测试。从我看到的示例中,名称并不总是与基准匹配。有人可以解释这些名称应该如何与基准相关吗?

4

1 回答 1

1

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

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

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

于 2021-03-25T05:13:17.807 回答