2015-09-07 107 views
0

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

如何制作它以便我所有导入的模块都可以在stack ghci以内导入?

+1

这种行为听起来相当令人惊讶。原则上,你不应该在.cabal文件的'build-depends'中不能* stack *而不用* process *。我的猜测是这里真正的问题是你在'/ src'中创建的文件没有被添加到.cabal文件的相关部分(即'exposed-modules'或'other-modules')。如果是这样的话,你的文件被'stack build'和其他命令忽略。 – duplode

+0

我想你已经指出了这个问题。我会相应地更新我给出的答案,但不会立即;随意编辑或张贴自己的。 –

回答

1

尽管NicholasMontaño的答案中的信息是正确的,但我相信它没有达到ro问题的一部分。问题的可能原因是新创建的源文件没有在cabal文件中声明,导致堆栈忽略它。项目中的每个源文件必须在cabal文件的一部分中声明,例如exposed-modules(对于要公开给您的代码的用户的库部分)或other-modules(对于您不想公开的内部模块)。

1

当您运行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.cabalbuild-depends: base >= 4.7 && < 5线,在这种情况下看起来像:

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

运行stack build再次(如果有任何进一步的问题,你可能想咨询stack guide,现在stack ghci应该有你导入到该文件中的所有模块可用。