【问题标题】:Different behavior of cabal repl for library vs. executablecabal repl 库与可执行文件的不同行为
【发布时间】:2014-07-22 22:45:15
【问题描述】:

在库项目中使用cabal repl 似乎什么都不做,但在可执行项目中效果很好。这是我不理解的预期行为吗?

如果我有一个包含简单的文件

go = putStrLn "test"

并使用 cabal init 和所有默认值(但选择“库”作为类型),然后运行 ​​cabal repl 只会产生一些关于配置和预处理库的文本,并且永远不会进入 REPL 环境。完全相同的步骤,但选择“可执行”作为类型,让我按预期进入 GHCi。

代码在直接加载到 GHCi 时运行良好。

【问题讨论】:

  • 您是否将该文件指定为公开模块?我认为cabal repl 只会在你指定它的情况下加载它,但这是一个未经测试的猜测。
  • @bheklilr 感谢您的想法,但这似乎不是问题所在。我在有和没有模块行的情况下都试过了,得到了相同的结果。
  • 你需要一个命名模块,但你还需要在项目的 cabal 文件中将其指定为包含模块。你也试过吗?
  • 就是这样,你第一次是对的。如果您想创建一个真正的答案,我很乐意将其标记为已接受。

标签: haskell ghc cabal ghci cabal-install


【解决方案1】:

要让cabal repl 加载您的模块,您必须先在代码中命名它们,然后在项目的.cabal 文件中将它们指定为公开:


-- MyModule.hs
module MyModule where

go = putStrLn "test"

-- MyProject.cabal
name: MyProject
-- other info ...

library
    exposed-modules: MyModule
    -- other options ...

然后,当您运行 cabal repl 时,它将可以访问您的沙盒(如果存在)中的所有内容以及暴露的模块。如果您将它们指定为 other-modules 而不是 exposed-modules,它也可能会起作用,但我还没有尝试过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多