【发布时间】:2016-05-28 13:33:50
【问题描述】:
我有一个带有源代码树的项目:
src/
src/A/
src/A/A.hs
src/B/
src/B/C/
src/B/C/C.hs
...
两个haskell文件将源代码分成模块:
-- File A/A.hs
module A where
...
和
-- File B/C/C.hs
module B.C where
...
cabal 文件包含:
other-modules: A, B.C, ...
hs-source-dirs: src/, src/A/, src/B/, src/B/C/, ...
虽然A 模块很容易找到,但阴谋集团抱怨B.C:
cabal: can't find source for B/C in ...
我没有看到任何合理的解释,为什么将文件定义模块 A 放在 A/A.hs 下是可以的,但将 B.C 放在 B/C/C.hs 下是不行的。除了将C.hs 直接放在B 下(我想保持一些来源分离)之外,还有其他解决方法吗?
【问题讨论】:
-
通常你只在
hs-source-dirs中列出像src/这样的顶级目录,然后你必须重命名模块A => A.A和模块B.C => B.C.C,模块A也必须放在src/A.hs中,例如aeson 作为有效模块结构的示例。我认为的错误是因为它在目录 B/C/ 中查找文件夹 B,然后在其中查找不存在的源文件C.hs。 -
对于模块 X.Y.Z,GHC 在 hs-source-dirs 中查找文件 X/Y/Z.hs。
标签: haskell build module hierarchy cabal