Haskell -- 如何在同一文件中使用多个模块?

26

非常抱歉,这是一个愚蠢的问题,但我无法弄清如何将多个模块放在同一个文件中。假设文件名为A.hs。如果我首先放置模块B,即

module B where ...
module A where ...

当我运行"ghci A"时,它会抱怨它期望A(不是顶层的,所以我不想调用"ghci A.hs")。反过来,它抱怨“模块输入解析错误”。

这里有一个相关的bug:http://hackage.haskell.org/trac/ghc/ticket/2428。即使其他模块仅在本地使用,是否真的没有办法解决这个问题?


7
好问题,尽管答案本质上是“你不能”。+1 - Dan Burton
你能简要说明为什么有人想要这个吗? - Tarrasch
@Tarrasch,这主要是为了解决名称冲突问题,当定义两个具有相同字段名称的记录类型时。 - gatoatigrado
2个回答

23

在同一个文件中不能有多个模块。你所提供的bug只是GHC的错误信息不够清晰。

然而,如果你正在使用Cabal,你仍然可以通过将想要用户可见的模块放在 Exposed-Modules 部分,并把任何内部模块放在 Other-Modules 中来控制模块的可见性。


8
我发现了以下错误报告
它涉及到这个邮件列表项,其中写道:
No, that's not possible because haskell will use the module name A.B.C to look the module up in path A/B/C.[l]hs.
So using modules
module A where
..
module B where
the compiler could only find one of them. (naming the file A.hs or B.hs)
You have to use one file for each module

所以,我想答案是否定的。


1
回复该帖子的评论指出这是 GHC 特定的限制,规范并没有强制要求。 - Janus Troelsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接