Haskell-找不到模块“ Test.QuickCheck”

问题描述

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

enter image description here

解决方法

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

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

这应该在.ghc.environment.xxx中创建一个格式为ex1haskell的文件,希望该文件应该由runhaskell / ghci / ghc调用来拾取。 / p>

ghci会话中,启动时出现以下消息,表明正在拾取环境:

从...加载的包环境

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

默认情况下,它正在写入全局环境 〜/ .ghc / $ ARCH- $ OS- $ GHCVER /环境/默认值。 v2-install提供了 --package-env标志,用于控制修改哪些环境。

但是runhaskell似乎无法在该默认位置中找到环境文件。

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

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

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

,

通用环境

如果/当实际工具不同时,很难调试,因此让我们首先进行统一设置。我将使用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

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