如何在受限制的合格导入上重用前缀

时间:2014-12-22 12:14:40

标签: haskell

我经常发现我正在使用带有一组相关模块的库,比如说:

A.B
A.B.C
A.B.D

我知道我能做到

import A.B (f1, f3)
import A.B.C (f7)

但有时这些函数有一些我不想用主要命名空间污染的常用名称。

所以我能做到:

import qualified A.B (f1, f3) 
import qualified A.B.C (f7)

但是我必须调用像A.B.C.f7这样很长的函数。

我能做到:

import qualified A.B   as B 
import qualified A.B.C as C

这有点帮助,但我仍然需要记住并指定我的功能是来自B还是C.

我发现你可以做到这一点:

import qualified A.B   as B 
import qualified A.B.C as B

除非A.BA.B.C中的某个功能具有相同的名称并且您尝试使用它,否则您将收到编译错误。

所以我基本上想做的是:

import qualified A.B (f1, f3) as B 
import qualified A.B.C (f7)   as B

但这不会编译。这是可能的(可能有扩展),如果是这样的话?

1 个答案:

答案 0 :(得分:5)

你快到了。尝试改为

import qualified A.B   as B (f1, f3) 
import qualified A.B.C as B (f7)

这可以在GHC中没有任何扩展。