haskellhaskell-criterion

Type error using Criterion


I read the documentation and some articles that talk about the package, but I'm new to Haskell and did not understand much but I tried ....

Below is what I did:

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
    ]

As it did the following error occurred:

Couldn't match expected type [[a]]
       against inferred type FilePath -> IO [[Int]]

Solution

  • Just so you have how I usually run it, using the nf or whnf functions, I'll give my code:

    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: If you like this then also give plotting a try:

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