繁体   English   中英

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

[英]Haskell stack, how to revert ambiguous module names found in multiple packages globally

尝试调试不同的问题时,我安装了一个似乎与我安装的其他一些软件包冲突的软件包。

我跑了

$ 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 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

在这里尝试了建议:

$ 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM