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
.
重用
我在尝试运行 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
.