cabal repl对库与可执行文件的不同行为

时间:2014-06-02 18:23:53

标签: haskell ghc cabal ghci cabal-install

在库项目中使用时,使用cabal repl似乎什么都不做,但对于可执行项目可以正常工作。这是我不明白的预期行为吗?

如果我的文件只包含

go = putStrLn "test"

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

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

1 个答案:

答案 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,它也可能有用,但我还没有尝试过那个。