【问题标题】:Haskell -- how to use multiple modules in the same file?Haskell——如何在同一个文件中使用多个模块?
【发布时间】:2011-08-03 06:15:11
【问题描述】:

抱歉,这是一个愚蠢的问题,但我不知道如何将多个模块放在同一个文件中。假设文件名为 A.hs。如果我把模块 B 首先,即

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

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

这里有一个相关的错误,http://hackage.haskell.org/trac/ghc/ticket/2428。是不是真的没有办法得到这个,即使其他模块只在本地使用?

【问题讨论】:

  • +1 好问题,虽然答案基本上是“你不能”
  • 你能简单地说一下为什么会想要这个吗?
  • @Tarrasch 主要是为了解决名称冲突,在定义具有相同字段名称的两种记录类型时。

标签: haskell module


【解决方案1】:

您不能在同一个文件中有多个模块。您链接到的错误只是 GHC 给出的错误消息对此不清楚。

但是,如果您使用 Cabal,您仍然可以通过将您希望用户可见的模块放在 Exposed-Modules 部分并将任何内部模块放在 Other-Modules 中来控制模块的可见性。

【讨论】:

    【解决方案2】:

    我找到了以下bug report

    指的是这个mailing list item,它声明:

    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
    

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

    【讨论】:

    • 对该帖子的回复指出这是 GHC 特定的限制,规范没有强制要求
    猜你喜欢
    • 2016-06-12
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多