haskell - Haskell堆栈,如何在全局范围内恢复在多个包中找到的模棱两可的模块名称
问题描述
在尝试调试不同的问题时,我安装了一个似乎与我安装的其他一些包冲突的包。
我跑了
$ 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>
推荐阅读
- angular - Angular Datatables - 重新加载数据
- lockscreen - SDDM 忽略自定义配置 (/etc/sddm.conf)
- postgresql - 在 macOS 上编译安装 postgreSQL V11 失败
- java - @JsonIgnoreProperties 不忽略未知属性
- matlab - 在matlab中找到矩阵中最大值两侧的局部最小值
- java - 在运行时在java中打开文件
- angular - 找不到不同的支撑物体 angular 7
- ruby-on-rails - Rails 5 可选的 has_many 关联
- amazon-web-services - 遇到不受支持的属性 SourceSecurityGroupId
- reactjs - 反应 Chrome 扩展不呈现