- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 ghci 中进行测试,但我在不同包中遇到了类似命名模块的问题(这基本上是我之前问题的延续:What should I do if two modules share the same name?)
有问题的软件包是 crypto-api
、cryptonite
和 DRBG
。它们都提供了涉及Crypto.Random
的模块。我在 ghci 中使用 PackageImports
来解决此问题。
但是,使用 PackageImports
的顺序似乎很重要。
这有效(在 ghci 中):
:set -XPackageImports
import Crypto.Random.DRBG
import "crypto-api" Crypto.Random
这不起作用:
:set -XPackageImports
import "crypto-api" Crypto.Random
import Crypto.Random.DRBG -- Error!
这也不起作用:
:set -XPackageImports
import "crypto-api" Crypto.Random
import "DRBG" Crypto.Random.DRBG -- Error!
出现的错误是:
<interactive>:1:1: error:
Ambiguous interface for ‘Crypto.Random’:
it was found in multiple packages:
crypto-api-0.13.2 cryptonite-0.23
我做错了什么还是这是一个错误?
最佳答案
也许最简单的方法是避免 PackageImports
并在启动 ghci 时使用 -package 重命名软件包选项:
ghci -package "crypto-api (Crypto.Random as A)" -package "cryptonite (Crypto.Random as B)"
进入 ghci 后,您可以导入重命名的模块:
Prelude> import A
Prelude A> import B
Prelude A B>
<小时/>
语法-package "crypto-api (Crypto.Random as A)"
只制作 Crypto.Random
模块可供 ghci 使用,但不适用于包中的其他模块。
根据Thinning and renaming modules GHC 用户指南部分:
We also support renaming of modules, in case you need to refer to both modules simultaneously; this is supporting by writing OldModName as NewModName, e.g. -package "base (Data.Bool as Bool). You can also write -package "base with (Data.Bool as Bool) to include all of the original bindings (e.g. the renaming is strictly additive).
所以也许最好写像 -package "crypto-api with (Crypto.Random as A)"
这样的选项保持对所有模块的访问。
使用PackageImports
与精简和重命名模块不同,问题在于它使源代码依赖于导入模块所在的精确包。如果模块更改了程序包,则会破坏程序。
关于haskell - 如何在 ghci 中正确使用 PackageImports?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47245895/
我是一名优秀的程序员,十分优秀!