gpt4 book ai didi

Haskell 堆栈,如何在全局范围内恢复在多个包中发现的模棱两可的模块名称

转载 作者:行者123 更新时间:2023-12-04 14:20:11 27 4
gpt4 key购买 nike

同时 trying to debug a different question ,我安装了一个似乎与我安装的其他一些软件包冲突的软件包。

我跑了

$ stack install regex-pcre-text
regex-pcre-builtin-0.94.4.8.8.35: configure
regex-tdfa-1.2.3.1: download
regex-pcre-builtin-0.94.4.8.8.35: build
regex-tdfa-1.2.3.1: configure
regex-tdfa-1.2.3.1: build
regex-pcre-builtin-0.94.4.8.8.35: copy/register
regex-tdfa-1.2.3.1: copy/register
regex-tdfa-text-1.0.0.3: download
regex-tdfa-text-1.0.0.3: configure
regex-tdfa-text-1.0.0.3: build
regex-tdfa-text-1.0.0.3: copy/register
regex-pcre-text-0.94.0.1: download
regex-pcre-text-0.94.0.1: configure
regex-pcre-text-0.94.0.1: build
regex-pcre-text-0.94.0.1: copy/register
Completed 4 action(s).

我不能再简单地导入

Text.Regex.PCRE

当我尝试时,我现在看到:

$ stack ghci
Prelude> :set -XOverloadedStrings
Prelude> import Text.Regex.PCRE

产量

<no location info>: error:
Ambiguous module name ‘Text.Regex.PCRE’:
it was found in multiple packages:
regex-pcre-0.94.4 regex-pcre-builtin-0.94.4.8.8.35

我想将我的安装恢复到较早的状态,以便我的机器上未经限定导入 Text.Regex.PCRE 的代码继续像以前一样工作。

不过stack好像没有明确卸载:

$ stack uninstall regex-pcre-text

Error: stack does not manage installations in global locations. The only global mutation stack performs is executable copying. For the default executable destination, please run stack path --local-bin

我犹豫要不要简单地运行这个 stack path --local-bin 因为我不知道它会做什么,或者它是否可以逆转(这是我在安装上面的错误包装放在首位)。我的导入问题的正确解决方法是什么?

更新1

我尝试了建议 here :

$ ghc-pkg unregister regex-pcre-text
ghc-pkg: cannot find package regex-pcre-text

$ stack exec ghc-pkg unregister regex-pcre-text
ignoring (possibly broken) abi-depends field for packages

最佳答案

问题是 regexp-pcre-text 安装了它的依赖项 regex-pcre-builtin 导致了冲突。您想要在全局项目中(即在任何特定项目目录之外)运行以下命令中的两个:

$ stack exec ghc-pkg unregister regex-pcre-text
$ stack exec ghc-pkg unregister regex-pcre-builtin

您已经运行了第一个,我怀疑它已成功完成,尽管出现了有关 abi-depends 字段的警告消息,因此您只需要运行第二个。

(这些可以组合成一个命令:

$ stack exec ghc-pkg unregister regex-pcre-text regex-pcre-builtin

但鉴于您已经删除了第一个包,我相信这会失败并显示一条消息,即未找到 regex-pcre-text。)

@DarthFennec提到的解决方案是使用PackageImports扩展来解决冲突。从 GHCi 看,即使安装了两个包,也可以使用 regex-pcre 包中的模块:

Prelude> :set -XPackageImports
Prelude> import "regex-pcre" Text.Regex.PCRE
Prelude Text.Regex.PCRE>

关于Haskell 堆栈,如何在全局范围内恢复在多个包中发现的模棱两可的模块名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55716502/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com