【问题标题】:Why can't the ghc (Haskell) compiler find the module Data.Vector which I have imported? I get the error: Could not find module 'Data.Vector'为什么 ghc (Haskell) 编译器找不到我导入的模块 Data.Vector?我收到错误:找不到模块“Data.Vector”
【发布时间】:2021-10-29 20:03:22
【问题描述】:

vector 模块已被“cabal install vector”安装

bash-3.2$ ghc-pkg list -f $HOME/.cabal/store/ghc-9.2.1/package.db 
/Users/gcolpitts/.cabal/store/ghc-9.2.1/package.db
    primitive-0.7.3.0
     vector-0.12.3.1 

但是编译器找不到:

$ ghc prob214ff.hs
[1 of 1] Compiling Main             ( prob214ff.hs, prob214ff.o )

prob214ff.hs:14:1: error:
    Could not find module ‘Data.Vector’
    Perhaps you meant Data.Functor (from base-4.16.0.0)
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
   |
14 | import Data.Vector

谢谢@n。 1.8e9-where's-my-share !

 ghc -package-db $HOME/.cabal/store/ghc-9.2.1/package.db  prob214ff.hs 

解决了我的问题,虽然它是 ghc 以前版本的回归,不需要使用 -package-db 选项。

我很想使用 GHC_PACKAGE_PATH,但我不知道如何使用它。 ghc 用户指南的第 5.9.5 节令人困惑。它指出“包数据库是存储有关已安装包的详细信息的位置。它是一个目录,通常称为 package.conf.d。”即不是我在命令行上使用 -package-db 提供的 package.db 文件。但是包含我使用 cabal 安装的矢量包信息的 package.conf.db 目录在哪里?

"ghc-pkg list" 引用 /usr/local/lib/ghc-9.2.1/lib/package.conf.d 但命令的输出没有列出我安装的向量包。

"ghc-pkg list -f $HOME/.cabal/store/ghc-9.2.1/package.db" 确实在其输出中列出了矢量包,但没有告诉我 package.conf.d 目录了解矢量包。

【问题讨论】:

  • 你可能没有告诉 ghc 那个 package.db 在哪里。试试ghc -package-db <file>,或者使用GHC_PACKAGE_PATH,或者使用包环境……另见github.com/haskell/cabal/issues/6262
  • 谢谢@n.1.8e9-where's-my-sharem !我的评论不合适,所以我改变了我的问题。我想也许我应该编辑整个内容以询问如何使用 GHC_PACKAGE_PATH。我必须使用它的事实似乎是一种回归,但我认为在这里讨论它没有任何意义。我应该提交一个关于那个的错误。

标签: haskell


【解决方案1】:

这对于 cabal 版本 2 有点繁琐。安装软件包不再有意义(尽管 cabal install 仍然存在......)。相反,您可能会发现创建 cabal 包最简单,例如:

$ mkdir my-package
$ cd my-package 
$ cabal init
<Edit my-package.cabal and add vector to the build-depends line>
<Put the contents of prob214ff.hs in app/Main.hs instead>
$ cabal run

【讨论】:

  • 谢谢。我相信你的话,上面的方法是可行的,但这不是阴谋集团的回归吗?是否有任何关于此的错误或文档?如果您认为这是有道理的,我很乐意提交错误。我有这个问题有一段时间了。这是间歇性的,当我之前遇到它时,我只是删除了所有内容并重新开始,但我厌倦了这样做。
  • 就我个人而言,我不认为这是阴谋集团的回归。没有全局包存储的新安排比包升级可能会破坏系统的旧版本更加连贯。不利的一面是,裸运行 ghc 不再是真正的事情了。要么制作一个包(如上所述),要么为 repl 运行 cabal repl --build-depends vector,比如说。
  • @GeorgeCo 我有点同意。我仍然在我的一台机器上使用 Cabal v1 风格,虽然它偶尔会出现旧的 Cabal hell 症状,但我从未发现这是一个如此糟糕的问题。而且我只是喜欢更简约的、使用已有的、不要沉默的关于重新安装的行为。也就是说:独立使用ghc 只会无缘无故地让你自己的生活变得困难。如果您拥有 Cabal 项目中的所有内容,那么您可以在任何地方轻松构建它,无论是使用 Cabal-v1、Cabal-v2 还是 Stack。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多