cabal repl在库和可执行文件中表现不同

7

当在库项目上使用 cabal repl 时,似乎什么也不会发生,但对于可执行项目则可以正常工作。我是否没有理解预期行为?

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

go = putStrLn "test"

使用所有默认选项(但选择“library”作为类型)执行 cabal init,然后运行 cabal repl 只会产生关于配置和预处理库的一些文本,从未进入 REPL 环境。当选择“executable”作为类型时,完全相同的步骤会像预期的那样立即进入 GHCi。

该代码在直接加载到 GHCi 中时可以正常工作。


你是否将该文件指定为暴露模块?我认为如果你没有指定,cabal repl 将不会加载它,但这只是一个未经测试的猜测。 - bheklilr
@bheklilr 谢谢您的建议,但这似乎不是问题所在。我尝试了加入和不加入模块行,但结果都一样。 - Karl
你需要一个命名模块,并在项目的cabal文件中指定它为已包含的模块。你也尝试过这样做了吗? - bheklilr
就是这样,你第一次就是正确的。如果你想提供一个真正的答案,我很乐意将其标记为已接受。 - Karl
1个回答

7

要让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,它也可能会起作用,但我没有尝试过这个方法。


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