在Haskell中,包含模块的模块名称和文件名必须相同。 问题是不仅是文件名,还包括all路径,所以你有(AFAIK)创建一个匹配模块层次结构的目录结构,这有点烦人。
例如,让我们说我在模块M中编写数据类型D,我认为它应该在Database
中。
模块名称应为Database.M.T
。由于我的主目录已经被称为M(包的名称),我最终得到以下目录结构:
M:
|
+-- Database:
|
+-- M:
|
+ A.hs
可以这样做:
M:
|
+ A.hs
将M
导出为Database.M
?
答案 0 :(得分:2)
目前这是不可能的,没有使用符号链接或类似于点Database.M
到M
,这会在可移植性和版本控制方面遇到各种问题。
Simon Marlow几个月前为GHC提出了一个新的选项来增加对别名的支持:http://www.haskell.org/pipermail/glasgow-haskell-users/2014-April/024920.html
他的想法是,您可以使用ghc
选项的新变体运行-i
:
ghc -iDatabase.M=M
然后M
文件夹中的任何内容都会被视为Database.M
的一部分。
您还可以将新选项放在hs-source-dirs
文件的.cabal
字段中。
然而,该提案存在各种异议,因此他暂时退出了提案。主要问题是它增加了复杂性,还需要更改其他几个工具(例如cabal
)以支持它。