我使用stack new Proj-Name simple
命令创建了一个新项目,并且在/src
目录内创建的文件中导入了GHC基本库import System.Process
以外的模块。运行stack build
成功,并且该文件按我的预期工作。但是,当我在同一目录内运行stack ghci
时,它没有已将System.Process
列为可导入模块。栈GHCI没有通过堆栈导入的模块
如何制作它以便我所有导入的模块都可以在stack ghci
以内导入?
我使用stack new Proj-Name simple
命令创建了一个新项目,并且在/src
目录内创建的文件中导入了GHC基本库import System.Process
以外的模块。运行stack build
成功,并且该文件按我的预期工作。但是,当我在同一目录内运行stack ghci
时,它没有已将System.Process
列为可导入模块。栈GHCI没有通过堆栈导入的模块
如何制作它以便我所有导入的模块都可以在stack ghci
以内导入?
尽管NicholasMontaño的答案中的信息是正确的,但我相信它没有达到ro问题的一部分。问题的可能原因是新创建的源文件没有在cabal文件中声明,导致堆栈忽略它。项目中的每个源文件必须在cabal文件的一部分中声明,例如exposed-modules
(对于要公开给您的代码的用户的库部分)或other-modules
(对于您不想公开的内部模块)。
当您运行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
应该有你导入到该文件中的所有模块可用。
这种行为听起来相当令人惊讶。原则上,你不应该在.cabal文件的'build-depends'中不能* stack *而不用* process *。我的猜测是这里真正的问题是你在'/ src'中创建的文件没有被添加到.cabal文件的相关部分(即'exposed-modules'或'other-modules')。如果是这样的话,你的文件被'stack build'和其他命令忽略。 – duplode
我想你已经指出了这个问题。我会相应地更新我给出的答案,但不会立即;随意编辑或张贴自己的。 –