Stack GHCI 没有通过 Stack 导入的模块

Stack GHCI doesn't have modules imported through Stack

我使用 stack new Proj-Name simple 命令创建了一个新项目,并在我在 /src 目录中创建的文件中导入了 GHC 基础库之外的模块 import System.Process。 运行 stack build 成功,文件按预期运行。但是,当我 运行 stack ghci 在同一目录中时,它 没有 System.Process 列为可导入模块。

如何使我导入的所有模块都可以在 stack ghci 中导入?

当您 运行 stack new ... 时,即使使用 simple 模板,您也会注意到创建了几个允许堆栈工作的文件。其中之一是 Proj_Name.cabal 文件,如果您打开它,您会注意到在文件的 executable Proj_Name 部分下有一个 main-is: Main.hs 行。

默认的 main-is 文件将是 Main.hs,但它可以是任何东西。您的导入应该放在您想要作为主文件的任何文件中。所以在这种情况下,您可以简单地将您创建的文件的名称(具有 System.Process 导入)放在该行的 Main.hs 的位置。

在此之后,运行 stack build,将它告诉您的任何依赖项添加到 Proj_Name.cabal 中的 build-depends: base >= 4.7 && < 5 行下,在本例中将如下所示:

build-depends:       base >= 4.7 && < 5
                   , process
再次

运行 stack build(如果还有其他问题,您可能需要咨询 stack guide,现在 stack ghci 应该包含您导入的所有模块在它可用的那个文件中。

虽然 Nicholas Montaño 的回答中的信息是正确的,但我认为它没有触及问题的根源。问题的可能原因是新创建的源文件没有在 cabal 文件中声明,导致堆栈忽略它。项目中的每个源文件都必须在 cabal 文件的一个部分中声明,可以是 exposed-modules(对于您想要向代码用户公开的部分库)或 other-modules(对于内部您不想公开的模块)。