【问题标题】:Haskell - could not find module 'Test.QuickCheck'Haskell - 找不到模块“Test.QuickCheck”
【发布时间】:2020-09-10 20:57:00
【问题描述】:

当我尝试运行haskell 时,我收到一条错误消息,提示该模块不存在。这很奇怪,因为我尝试先安装它并说它是最新的。知道如何解决这个问题吗?

【问题讨论】:

  • 你可能需要在你的 cabal 文件中添加一个依赖项。
  • i.imgur.com/nNaeODy.png 我将此添加到我的 cabal 文件中并运行 cabal configure、cabal build 和 cabal install。我在 cabal 安装时遇到了这个错误:i.imgur.com/6zATtvu.png
  • runhaskell 调用默认情况下不公开模块的 GHC。如果你有一个 cabal 文件,为什么要使用 runhaskell?不能cabal run吗?
  • 许可证错误只是说您需要一个许可证文件touch LICENSE 来制作一个空白文件。我不喜欢这种阴谋集团的行为,但我确信问题跟踪器上有一个很长的争论。
  • 如何让 ghc 暴露模块?我宁愿使用 runhaskell

标签: haskell module quickcheck cabal-install


【解决方案1】:

您可以尝试在保存您的项目的本地目录中创建package environment,如下所示:

c:\Users\...\ex1haskell> cabal install --lib --package-env . QuickCheck

这应该在ex1haskell 中创建一个.ghc.environment.xxx 形式的文件,希望该文件应该被runhaskell/ghci/ghc 调用拾取。

ghci 会话中,环境正在被拾取的标志是启动时出现以下消息:

从...加载包环境

--package-env 位置未明确给出时,将使用默认位置。 According to the docs:

默认情况下,它正在写入到全局环境中 ~/.ghc/$ARCH-$OS-$GHCVER/environments/default。 v2-install 提供 --package-env 标志来控制这些环境中的哪一个被修改。

但似乎runhaskell 在该默认位置查找环境文件时遇到问题。

注意。创建包环境时,可以同时指定多个包,如下所示:

cabal install --lib --package-env . QuickCheck random aeson transformers

此外,包环境只是文本文件,因此可以随意删除和重新创建本地环境。实际的包二进制文件位于其他地方,并且可能被cabal 重用。

【讨论】:

【解决方案2】:

一个共同的环境

如果/当实际工具不同时,很难调试,所以让我们首先进行统一设置。我将使用 docker 来获取 GHC 8 和 Cabal 3.x:

docker run --rm -it haskell bash

请理解,这不是任意的,甚至不是先发制人的。你所展示的 - cabal install --lib ...runhaskell ... 确实适用于理智的工具安装。您可能安装了错误的工具或具有不同行为的旧版本工具。

使用 runhaskell 运行单个文件

现在我们需要一个项目:

root@8a934c302dba:/# mkdir Ex1
root@8a934c302dba:/# cd Ex1
root@8a934c302dba:/Ex1# cat <<EOF >Main.hs
> import Test.QuickCheck
>
> main :: IO ()
> main = print =<< (generate arbitrary :: IO Int)
> EOF

测试失败:

root@8a934c302dba:/Ex1# runhaskell Main.hs

Main.hs:1:1: error:
    Could not find module `Test.QuickCheck'
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
  |
1 | import Test.QuickCheck

并安装库:

root@8a934c302dba:/Ex1# cabal update && cabal install --lib QuickCheck

并成功运行:

root@8a934c302dba:/Ex1# runhaskell Main.hs
15

所以我上面的评论是错误的——我们不需要明确列出包,因为它在安装后已经暴露了。

【讨论】:

  • 我尝试进行 cabal 更新,然后 cabal 安装,然后 runhaskell,因为我认为我还没有尝试过该步骤序列,但仍然无法正常工作。我会尝试像你一样创建一个新的工作目录。
  • 对我不起作用 - 导入 QuickCheck 失败。; cabal info QuickCheck 说“未安装”。必须使用 v1-install,然后它才能工作。
  • 我能够成功地执行我上面的序列。您确定您运行了如图所示的“并安装库”部分吗?你能粘贴你的全套步骤吗?
猜你喜欢
  • 1970-01-01
  • 2017-07-27
  • 2013-08-05
  • 2022-11-14
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多