Ошибка использования критерия Haskell - PullRequest
1 голос
/ 20 октября 2011

Следующий код с именем fib.hs

import Criterion.Main (defaultMain)
fibZ = 1:1:zipWith (+) fibZ (tail fibZ)
main = defaultMain [
         bench "fibZ 10" $ \n -> fibZ (10+n-n)
       ]

ошибки с

fib.hs:45:10: Not in scope: `bench'

Что не так?Я заимствовал этот пример из здесь .

Ответы [ 2 ]

8 голосов
/ 20 октября 2011

Используйте

import Criterion.Main

вместо

import Criterion.Main (defaultMain)

Функция bench из Criterion.Main недоступна, поскольку вы импортируете только defaultMain.Использовать bgroup не обязательно.

Вот полный рабочий пример:

import Criterion.Main

fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

main = defaultMain [
         bench "fib 10" $ nf fib 10
       , bench "fib 30" $ nf fib 30
       , bench "fib 35" $ nf fib 35
       ]

Если вам интересно, для чего нужны эти nf вещи, посмотрите на этот раздел документации.

3 голосов
/ 20 октября 2011

Библиотека изменилась с момента написания этого поста. Теперь вы должны написать:

 import Criterion.Main

 fib :: Int -> Int
 fib 0 = 0
 fib 1 = 1
 fib n = fib (n-1) + fib (n-2)

 main = defaultMain [
        bgroup "fib" [ bench "fib 10" $ B fib 10
                     , bench "fib 35" $ B fib 35
                     , bench "fib 37" $ B fib 37
                     ]
                    ]

Это было взято непосредственно из раздела «Запуск тестов» документации по Hackage для Criterion.Main .

...