0

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

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

4

2 回答 2

1

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

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

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

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

再次运行stack build(如果还有其他问题,您可能需要查阅堆栈指南,现在stack ghci应该可以使用您在该文件中导入的所有模块。

于 2015-09-07T00:48:56.033 回答
1

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

于 2015-09-20T01:43:27.680 回答