我使用命令创建了一个新项目stack new Proj-Name simple
,并在我在/src
目录中创建的文件中导入了 GHC 基础库之外的模块,import System.Process
. 运行stack build
成功,文件按我预期工作。但是,当我stack ghci
在同一目录中运行时,它并没有System.Process
列为可导入模块。
如何使我所有导入的模块都可以在其中导入stack ghci
?
我使用命令创建了一个新项目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
,将它告诉您的任何依赖项添加到build-depends: base >= 4.7 && < 5
in 行下Proj_Name.cabal
,在这种情况下,它将如下所示:
build-depends: base >= 4.7 && < 5
, process
再次运行stack build
(如果还有其他问题,您可能需要查阅堆栈指南,现在stack ghci
应该可以使用您在该文件中导入的所有模块。
虽然 Nicholas Montaño 的回答中的信息是正确的,但我相信它并没有触及问题的根源。问题的可能原因是新创建的源文件未在 cabal 文件中声明,导致堆栈忽略它。项目中的每个源文件都必须在 cabal 文件的一部分中声明,无论是exposed-modules
(对于您想要向代码用户公开的库的一部分)还是other-modules
(对于您不想公开的内部模块)。