【问题标题】:Type error using Criterion使用标准输入错误
【发布时间】:2011-05-01 07:00:33
【问题描述】:

我阅读了有关该软件包的文档和一些文章,但我是 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]]

【问题讨论】:

  • 两件事:如果您可以提供 mapapsort 函数,会更容易提供帮助,并且根据 GHC 文档,pragma 必须在 module 行之前。
  • Travis Brown,谢谢,我做了很多测试,忘了修复它。

标签: haskell criterion


【解决方案1】:

只要你知道我通常如何运行它,使用 nfwhnf 函数,我会给出我的代码:

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

【讨论】:

  • TomMD,再次感谢您。我做了几次测试,改变了括号的位置,但没有一个起作用,还没有这样做,现在程序正在运行,使用 Criterion 确实更容易,不会遇到懒惰评估的问题。
  • TomMD,也许我的 Criterion 没有完全工作,你把这个命令应该打开一个带有图形的窗口是什么?
  • Gmp,是的,第二段代码是一个完整的程序,它应该打开一个窗口,其中显示执行时间密度。
  • 打不开,嘿嘿嘿,是不是Creterion的安装有问题?
  • 只出现了估计时钟分辨率,以及来自执行的数据。
【解决方案2】:

问题是这样的:map sort learquivo

sort 需要一个列表,因此 map sort 需要一个列表列表 ([[a]]),而 learquivo 的类型是 FilePath -&gt; IO [[Int]]

你可能想要这样的东西:

main = do
    contents <- learquivo "mkList1.txt"
    defaultMain [
       bench "map sort learquivo" $ \n -> map sort contents
    ]

你的代码中有很多东西可以被清理,但这应该能让你继续前进。

【讨论】:

  • Ganesh Sittampalam,没错,它不见了。我正在慢慢尝试了解正在发生的事情。
猜你喜欢
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
  • 2013-01-11
  • 2011-11-30
  • 1970-01-01
  • 2012-10-19
相关资源
最近更新 更多