我不能让莱恩去工作。我遵循了教程这里,通过执行以下操作来安装标准。
cabal update
cabal install -j --disable-tests criterion当我尝试ghc -O Fibber.hs或ghc -O --make Fibber时,我会收到错误
[1 of 1] Compiling Main ( Fibber.hs, Fibber.o )
Fibber.hs:1:1: error:
Could not find module ‘Criterion.Main’
Use -v (or `:set -v` in ghci) to see a list of the files searched for.
|
1 | import Criterion.Main
|我期望运行测试和诊断,并将其输出到控制台和HTML文件。尝试使用堆栈会导致相同的错误。我以前用我自己的模块解决了这个问题,方法是将它们包括在我的.cabal文件中,如下所示
library
Exposed-Modules:
Geometry.Sphere
Geometry.Cuboid
Geometry.Cube但在这种情况下这样做并不能解决问题。我也尝试过这样的解决方案,但没有结果。我基本上收到了同样的错误:
/Users/me/Documents/projects/haskell/performance/criterion-1.5.13.0/Criterion/Fibber.hs:3:1: error:
Could not find module ‘CriterionMain’
Use -v (or `:set -v` in ghci) to see a list of the files searched for.
|
3 | import CriterionMain
| ^^^^^^^^^^^^^^^^^^^^
Received ExitFailure 1 when running
Raw command: /Users/me/.stack/programs/aarch64-osx/ghc-9.2.2/bin/ghc-9.2.2 -i -i/Users/me/Documents/projects/haskell/performance/criterion-1.5.13.0/Criterion/ -hide-all-packages -fdiagnostics-color=always -packagebase -O2 /Users/me/Documents/projects/haskell/performance/criterion-1.5.13.0/Criterion/Fibber.hs
Run from: /Users/me/Documents/projects/haskell/performance/criterion-1.5.13.0/Criterion/
Standard output:
[1 of 1] Compiling Main ( /Users/me/Documents/projects/haskell/performance/criterion-1.5.13.0/Criterion/Fibber.hs, /Users/me/Documents/projects/haskell/performance/criterion-1.5.13.0/Criterion/Fibber.o )这是我的.cabal文件。
name: criterion
version: 1.5.13.0
synopsis: Robust, reliable performance measurement and analysis
license: BSD3
license-file: LICENSE
author: Bryan O'Sullivan <bos@serpentine.com>
maintainer: Ryan Scott <ryan.gl.scott@gmail.com>
copyright: 2009-2016 Bryan O'Sullivan and others
category: Development, Performance, Testing, Benchmarking
homepage: http://www.serpentine.com/criterion
bug-reports: https://github.com/haskell/criterion/issues
build-type: Simple
cabal-version: >= 1.10
extra-source-files:
README.markdown
changelog.md
examples/LICENSE
examples/*.cabal
examples/*.hs
tested-with:
GHC==7.4.2,
GHC==7.6.3,
GHC==7.8.4,
GHC==7.10.3,
GHC==8.0.2,
GHC==8.2.2,
GHC==8.4.4,
GHC==8.6.5,
GHC==8.8.4,
GHC==8.10.7,
GHC==9.0.2,
GHC==9.2.1
data-files:
templates/*.css
templates/*.tpl
templates/*.js
description:
This library provides a powerful but simple way to measure software
performance. It provides both a framework for executing and
analysing benchmarks and a set of driver functions that makes it
easy to build and run benchmarks, and to analyse their results.
.
The fastest way to get started is to read the
<http://www.serpentine.com/criterion/tutorial.html online tutorial>,
followed by the documentation and examples in the "Criterion.Main"
module.
.
For examples of the kinds of reports that criterion generates, see
<http://www.serpentine.com/criterion the home page>.
flag fast
description: compile without optimizations
default: False
manual: True
flag embed-data-files
description: Embed the data files in the binary for a relocatable executable.
(Warning: This will increase the executable size significantly.)
default: False
manual: True
library
exposed-modules:
Criterion
Criterion.Analysis
Criterion.IO
Criterion.IO.Printf
Criterion.Internal
Criterion.Main
Criterion.Main.Options
Criterion.Monad
Criterion.Report
Criterion.Types
other-modules:
Criterion.Main.Options.Internal
Criterion.Monad.Internal
other-modules:
Paths_criterion
build-depends:
-- TODO: Eventually, we should bump the lower version bounds to >=2 so that
-- we can remove some CPP in Criterion.Report. See #247.
aeson >= 1 && < 2.1,
ansi-wl-pprint >= 0.6.7.2,
base >= 4.5 && < 5,
base-compat-batteries >= 0.10 && < 0.13,
binary >= 0.5.1.0,
binary-orphans >= 1.0.1 && < 1.1,
bytestring >= 0.9 && < 1.0,
cassava >= 0.3.0.0,
code-page,
containers,
criterion-measurement >= 0.1.1.0 && < 0.2,
deepseq >= 1.1.0.0,
directory,
exceptions >= 0.8.2 && < 0.11,
filepath,
Glob >= 0.7.2,
microstache >= 1.0.1 && < 1.1,
js-chart >= 2.9.4 && < 3,
mtl >= 2,
mwc-random >= 0.8.0.3,
-- TODO: Depend on optparse-applicative-0.17 as the minimum (see #258)
optparse-applicative >= 0.13 && < 0.18,
parsec >= 3.1.0,
statistics >= 0.14 && < 0.16,
text >= 0.11,
time,
transformers,
transformers-compat >= 0.6.4,
vector >= 0.7.1,
vector-algorithms >= 0.4
if impl(ghc < 7.6)
build-depends:
ghc-prim
if !impl(ghc >= 8.0)
build-depends:
fail == 4.9.*,
semigroups
default-language: Haskell2010
ghc-options: -Wall -funbox-strict-fields
if impl(ghc >= 6.8)
ghc-options: -fwarn-tabs
if flag(fast)
ghc-options: -O0
else
ghc-options: -O2
if flag(embed-data-files)
other-modules: Criterion.EmbeddedData
build-depends: file-embed < 0.1,
template-haskell
cpp-options: "-DEMBED"
Executable criterion-report
Default-Language: Haskell2010
GHC-Options: -Wall -rtsopts
Main-Is: Report.hs
Other-Modules: Options
Paths_criterion
Hs-Source-Dirs: app
Build-Depends:
base,
base-compat-batteries,
criterion,
optparse-applicative >= 0.13
if impl(ghc < 7.6)
build-depends:
ghc-prim
if !impl(ghc >= 8.0)
build-depends:
semigroups
test-suite sanity
type: exitcode-stdio-1.0
hs-source-dirs: tests
main-is: Sanity.hs
default-language: Haskell2010
ghc-options: -Wall -rtsopts
if flag(fast)
ghc-options: -O0
else
ghc-options: -O2
build-depends:
HUnit,
base,
bytestring,
criterion,
deepseq,
tasty,
tasty-hunit
test-suite tests
type: exitcode-stdio-1.0
hs-source-dirs: tests
main-is: Tests.hs
default-language: Haskell2010
other-modules: Properties
ghc-options:
-Wall -threaded -O0 -rtsopts
build-depends:
QuickCheck >= 2.4,
base,
base-compat-batteries,
criterion,
statistics,
HUnit,
tasty,
tasty-hunit,
tasty-quickcheck,
vector,
aeson
test-suite cleanup
type: exitcode-stdio-1.0
hs-source-dirs: tests
default-language: Haskell2010
main-is: Cleanup.hs
ghc-options:
-Wall -threaded -O0 -rtsopts
build-depends:
HUnit,
base,
base-compat,
bytestring,
criterion,
deepseq,
directory,
tasty,
tasty-hunit
source-repository head
type: git
location: https://github.com/haskell/criterion.git发布于 2022-04-19 19:14:46
一种选择是使用依赖解决的REPL。
% cabal repl --build-depends criterion
> :l Fibber.hs另一个是创建一个阴谋集团。
% mkdir Fibber
% mv Fibber.hs Fibber
% cd Fibber
% cabal init
<follow prompts, and say you're building an executable with filename Fibber.hs>
% vi Fibber.cabal
<add criterion to the build-depends: stanza>
% cabal run Fibber # or whatever executable name you gave it in the cabal init step后者的一个优点是,当您发现其他依赖项时,您可以在一个文件中记录所有这些依赖项,而不必记得每次启动cabal repl时都传递所有这些依赖项。另一个是您的代码将被编译,而不是被解释;对于性能测试非常重要,如果您需要标准,这大概就是您要做的!
发布于 2022-04-20 09:20:12
5分钟卡巴尔解释
只是简单而不完整地解释一下cabal是如何工作的,这样您就可以理解错误了。
一个项目由组件组成:库和"runnables“(为了解释而起的名称)。每个组件在build-depends标记下都有自己的一组依赖项。
库没有入口点,所以它们不需要main函数,也不需要指定main-is。一个阴谋集团文件只有一个公共图书馆,它是包的名称,位于标记为name的文件的顶部。您可以拥有内部库,但这是另一个主题。在criterion的阴谋集团文件中,你可以看到:
name是criterion (第一行)library标记下构建配置。(依赖项、公开模块等)运行程序确实需要一个main函数和一个标记为main-is的模块。Runnable可以是可执行文件、测试套件或基准测试。AFAIK,将可运行的标记为其中之一,只会影响cabal 编译/安装通过命令的方式:cabal build、cabal run、cabal test、cabal bench等。例如,cabal build将编译(默认情况下)库组件和生成二进制文件的可执行组件,但cabal test将编译库组件和测试组件,然后运行测试。理论上,您可以使用Criterion.Main.defaultMain作为普通可执行文件(定义为阴谋文件中的en可执行组件)的主要函数,在这种情况下,阴谋集团将生成一个独立的exe,它将在执行时运行基准。
在criterion的阴谋文件中,您可以看到可执行的测试套件和三个测试套件:
criterion-report的可执行文件在app文件夹下sanity、test和cleanup在test文件夹下的测试套件每个组件都有不同的依赖集,特别是,它们都依赖于criterion库,该库是在library节下的同一个阴谋文件中定义的组件,如前所述。
我的错误到底是怎么回事?
因此,本质上,您希望Fibber.hs文件是一个“可运行的”文件,或者作为一个独立的二进制文件,或者作为一个项目中的基准测试套件。因此,您需要根据自己的喜好将其添加到一个阴谋文件中。作为一项建议,避免将其添加到source的阴谋文件中,否则您将从源代码编译条件。按照@DanielWagner的答案,创建一个新项目,其中Fibber.hs是一个主文件,并将criterion添加到它的依赖项中,或者使用依赖项-repl替代方案。
https://stackoverflow.com/questions/71918410
复制相似问题