Не удалось найти модуль 'Criterion.Main' - PullRequest
0 голосов
/ 01 июня 2018

Я скопировал следующий код из учебника критериев:

import Criterion.Main

-- The function we're benchmarking.
fib m | m < 0     = error "negative!"
      | otherwise = go m
  where
    go 0 = 0
    go 1 = 1
    go n = go (n-1) + go (n-2)

-- Our benchmark harness.
main = defaultMain [
  bgroup "fib" [ bench "1"  $ whnf fib 1
               , bench "5"  $ whnf fib 5
               , bench "9"  $ whnf fib 9
               , bench "11" $ whnf fib 11
                ]
     ]

Я получаю следующую ошибку:

fiber.hs: 1: 1: ошибка: не удалось найти модуль 'Criterion.Main 'Используйте -v, чтобы увидеть список искомых файлов.|1 |import Criterion.Main |^^^^^^^^^^^^^^^^^^^^^

Используемая мной версия GHC - 8.4.2, версия для каббала - 2.2.0.0.

Я пытался установить пакет критериев:

cabal update
Downloading the latest package list from hackage.haskell.org
To revert to previous state run: cabal update --index-state='2018-06- 
01T04:23:08Z'

cabal install -j --disable-tests criterion
clang: warning: argument unused during compilation: '-nopie' [-Wunused- 
command-line-argument]
.
.
.
.
cabal: Error: some packages failed to install:
abstract-deque-0.3-IvBVpgU2tvq3eILHsBTjFR failed during the building 
phase.
The exception was:
ExitFailure 1
aeson-1.3.1.1-J9Jy9Bz77dxJho59OWZvUt depends on aeson-1.3.1.1 which 
failed to install.
attoparsec-0.13.2.2-5fvnJr9WRPCJj7fMCLKoI7 depends on attoparsec- 
0.13.2.2
which failed to install.
cassava-0.5.1.0-CNxiRQP2h44BSkY7PLw3nv depends on cassava-0.5.1.0 which 
failed
to install.
criterion-1.4.1.0-1CDqJgx5SYk1Xphp8S6hvK depends on criterion-1.4.1.0 
which failed to install.
microstache-1.0.1.1-DUzquwnO02sC17piNr03EI depends on microstache- 
1.0.1.1 which failed to install.
monad-par-0.3.4.8-5Qx7yEAZEkjJbqZykcUjIa depends on monad-par-0.3.4.8 
which failed to install.
monad-par-extras-0.3.3-755mClpwIBoBMORFcN7gCY failed during the 
building phase. The exception was:
ExitFailure 1
scientific-0.3.6.2-65wDZeAE9ZIBkaesoEq4I0 failed during the building 
phase.
The exception was:
ExitFailure 1
statistics-0.14.0.2-GHJ1OiovyXP1FEjV1emzr8 depends on statistics- 
0.14.0.2 which failed to install.
text-short-0.1.2-JRY9FeZhxkoAZrj3rm5IJZ failed during the building 
phase. The exception was:
ExitFailure 1
uuid-types-1.0.3-tE9Bfk2PgXDUPgbtamBdI failed during the building 
phase. The exception was:
ExitFailure 1

1 Ответ

0 голосов
/ 01 июня 2018

Один из подходов - использовать интерпретатор стека для запуска этого.Для этого вы должны сначала установить стек , а затем добавить биты интерпретатора сценария в начало файла, например:

#!/usr/bin/env stack
-- stack --resolver lts-11.10 script --optimize
import Criterion.Main

-- The function we're benchmarking.
fib m | m < 0     = error "negative!"
    | otherwise = go m
where
    go 0 = 0
    go 1 = 1
    go n = go (n-1) + go (n-2)

-- Our benchmark harness.
main = defaultMain [
bgroup "fib" [ bench "1"  $ whnf fib 1
            , bench "5"  $ whnf fib 5
            , bench "9"  $ whnf fib 9
            , bench "11" $ whnf fib 11
                ]
    ]

Обратите внимание, чтоЯ добавил параметр --optimize во второй строке, чтобы Stack скомпилировал ваш код с оптимизацией вместо использования по умолчанию runghc.

И, наконец, запустил файл с stack fiber.hs (иликак бы вы ни назвали файл).

...