我阅读了文档和一些谈论这个软件包的文章,但我是Haskell的新手并且对我的理解并不多,但我尝试了......
以下是我的所作所为:
module Main where
{-# LANGUAGE BangPatterns #-}
import Control.Parallel(par,pseq)
import Control.Exception
import Data.List
import IO
import Data.Char
import Criterion.Main (defaultMain, bench)
learquivo :: FilePath -> IO ([[Int]])
learquivo "mkList1.txt" = do
conteudo <- readFile "mkList1.txt"
return (read conteudo)
main = defaultMain [
bench "map sort learquivo" $ \n -> map sort learquivo
]
因为它发生了以下错误:
Couldn't match expected type [[a]]
against inferred type FilePath -> IO [[Int]]
答案 0 :(得分:2)
问题是:map sort learquivo
sort
需要一个列表,因此map sort
需要一个列表列表([[a]]
),而learquivo
的类型为FilePath -> IO [[Int]]
类型。
您可能需要以下内容:
main = do
contents <- learquivo "mkList1.txt"
defaultMain [
bench "map sort learquivo" $ \n -> map sort contents
]
您的代码中有各种各样的东西可以清理,但这应该可以帮助您。
答案 1 :(得分:2)
通过使用nf
或whnf
函数,我通常会运行它,我会给出我的代码:
import Data.List
import Criterion.Main
main :: IO ()
main = do
-- content <- learquivo "mkList1.txt"
let content = [ [big, big - step.. 0] | big <- [1000..1010], step <- [1..5]] :: [[Int]]
defaultMain
[ bench "benchmark-name" (nf (map sort) content)]
编辑:如果你喜欢这个,那么也可以试一试:
module Main where
import Data.List
import Criterion.Main
import Criterion.Config
import Criterion.MultiMap as M
main :: IO ()
main = do
let myConfig = defaultConfig {
-- Always display an 800x600 window with curves.
cfgPlot = M.singleton KernelDensity (Window 800 600)
}
let content = [ [big, big-step.. 0] | big <- [1000..1010], step <- [1..5]] :: [[Int]]
defaultMainWith myConfig (return ())
[ bench "benchmark-name" (nf (map sort) content)]