【发布时间】:2013-10-09 13:21:07
【问题描述】:
我的理解是,在 Haskell 中,模块的点分语法表示磁盘上的逻辑结构。所以,如果我们有这样的结构:
Main.hs
Foo/
Bar.hs -- exports "Bar"
Quux.hs -- exports "Quux"
...那么在我们的Main.hs,我们可以这样做:
import Foo.Bar
import Foo.Quux
(我假设我们只能在文件系统的叶节点上拥有模块。例如,在上面,我们不可能拥有Foo 模块。)
在此示例中,我们正在遍历树。如果我们想上去怎么办?
lib/
SomeModule.hs
XYZ.hs
src/
Main.hs
即在Main.hs中,我们如何导入SomeModule或XYZ?
也许这在Main 中并不常见,但是模块间的依赖关系呢?他们可能合法地需要引用“表亲”节点。
【问题讨论】:
-
在“分支”拥有模块是很常见的——例如在与
Foo/目录相同的目录中创建Foo.hs -
另外,准确地说:模块的虚线句法表示在GHC中的磁盘上的逻辑结构。报告本身根本没有说明模块是如何存储在磁盘上的,竞争对手的实现可以选择做其他事情——拥有清单文件、使用数据库、将东西存储在云中......