Haskell - 找不到模块 'Test.QuickCheck'

Haskell - could not find module 'Test.QuickCheck'

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

共同的环境

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

docker run --rm -it haskell bash

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

运行 带有 运行haskell

的单个文件

现在我们需要一个项目:

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

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

您可以尝试在包含项目的 local 目录中创建 package environment,如下所示:

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

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

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

Loaded package environment from ...

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

By default, it is writing to the global environment in ~/.ghc/$ARCH-$OS-$GHCVER/environments/default. v2-install provides the --package-env flag to control which of these environments is modified.

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

。创建包环境时,可以同时指定多个包,像这样:

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

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

重用