我有这个代码
module M where
a = 1
b = 2
x = 10
y = 20
...但是随着模块的增长,处理重复的名称变得很困难。
是否可以有这样的命名空间?
module M where
module A where
a = 1
b = 2
module X where
x = 10
y = 20
..然后
...
import M
s = A.a + X.y
最佳答案
据我所知,Haskell 目前不支持您提出的建议。也就是说,没有什么可以阻止您创建看似命名空间的模块。例如:
module Top where
myTopFunc :: a -> Int
myTopFunc _ = 1
在另一个文件中:
module Top.Sub where
mySubFunc :: a -> String
mySubFunc _ = "Haskell"
除此之外,您还可以使用一些技巧来安排模块。如果将模块 A 导入到 B 中,则可以从 B 中导出 A 的可见实体,就好像它们是它自己的一样。随后,在导入 B 时,您将能够使用这些函数/数据类型等,而无需注意它们最初来自哪里。使用上面的模块的一个示例是:
module Top (
myTopFunc,
TS.mySubFunc
) where
import qualified Top.Sub as TS
myTopFunc :: a -> Int
myTopFunc _ = 1
现在您只需导入 Top
即可使用这两个函数。
import Top (myTopFunc, mySubFunc)
关于haskell - Haskell 中可以有子模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42390523/