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
(对于内部您不想公开的模块)。
我使用 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
(对于内部您不想公开的模块)。