在库项目中使用时,使用cabal repl
似乎什么都不做,但对于可执行项目可以正常工作。这是我不明白的预期行为吗?
如果我的文件只包含
go = putStrLn "test"
并使用cabal init
和所有默认值(但选择“library”作为类型),然后运行cabal repl
只会产生一些关于配置和预处理库的文本,并且永远不会进入REPL环境。完全相同的步骤,但选择“可执行”作为类型,使我按预期正确进入GHCi。
直接加载到GHCi中时,代码可以正常工作。
答案 0 :(得分: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
,它也可能有用,但我还没有尝试过那个。