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