2010-10-27 3 views
2

Я прочитал документацию и некоторые статьи, которые говорят о пакете, но я новичок в 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

Две вещи: было бы проще помочь, если бы вы могли предоставить функции 'mapa' и' psort', и согласно документации GHC прагма должна предшествовать строке 'module'. –

+0

Трэвис Браун, спасибо, я сделал так много тестов, что забыл исправить это. – Gmp

ответ

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

EDIT: Если вам нравится это, то также дают черчения попробовать:

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

TomMD, еще раз спасибо. Я сделал несколько тестов, изменив место скобок, но никто не работал, еще не сделал этого, теперь программа работает, с Критерием это действительно проще, без проблем с ленивой оценкой. – Gmp

+0

TomMD, может быть, мой Criterion не полностью работает, что вы положили эту команду, чтобы открыть окно с графикой? – Gmp

+0

Gmp, да второй бит кода - это полная программа, которая должна открыть окно с графиком, показывающим плотность времени выполнения. –

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 
    ] 

Есть различные вещи в вашем коде, которые могут быть очищены, но это должно вам начать работу.

+0

Ganesh Sittampalam, правда, его не хватало. Я медленно пытаюсь понять, что происходит. – Gmp