导出具有不同层次结构的haskell模块

时间:2014-06-15 09:14:54

标签: haskell cabal

在Haskell中,包含模块的模块名称和文件名必须相同。 问题是不仅是文件名,还包括all路径,所以你有(AFAIK)创建一个匹配模块层次结构的目录结构,这有点烦人。

例如,让我们说我在模块M中编写数据类型D,我认为它应该在Database中。 模块名称应为Database.M.T。由于我的主目录已经被称为M(包的名称),我最终得到以下目录结构:

M:
|
+-- Database:
    |
    +-- M:
        |
        + A.hs

可以这样做:

M:
|
+ A.hs

M导出为Database.M

1 个答案:

答案 0 :(得分:2)

目前这是不可能的,没有使用符号链接或类似于点Database.MM,这会在可移植性和版本控制方面遇到各种问题。

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)以支持它。