加载具有依赖项的 Haskell 模块

Tsh*_*nga 3 import haskell ghc ghci

我不确定我的问题是什么。我有三个模块 A.hs、B.hs 和 C.hs。所有都位于C:\..path...\folder并且模块 B 和 C 都从 A 导入。

也就是说,模块 B 和 C 都包含行 import A

我可以:l C:\..path..\folder\A.hs在 gchi 中玩它的内容;但是,当我尝试:l C:\..path..\folder\B.hs:l C:\..path..\folder\C.hs

    Could not find module `A'
    Use -v to see a list of the files searched for.
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)

我觉得这很奇怪,因为我可以轻松地将 B.hs 编译为 B.exe 并运行可执行文件。如何编译和运行无法加载到 ghci 中的模块?或者,为什么在编译时导入成功但加载失败;尤其是当导入的那个模块本身可以加载时?

Dan*_*ner 5

默认情况下,ghci仅在当前目录中搜索导入的模块。首先,当前目录是用于启动的目录ghci;但它可以从内改变ghci与该:cd命令。这样,你可以

> :cd C:\...path...\folder
> :l B.hs
Run Code Online (Sandbox Code Playgroud)

这应该在当前目录中找到B.hsA.hs。或者(特别是如果您在多个目录中有模块时)您可以使用-i命令行选项启动 ghci以将目录添加到其模块搜索路径。例如,在您的命令提示符中,您可能

% ghci -iC:\...path...\folder
> :l B.hs
Run Code Online (Sandbox Code Playgroud)

这将指示ghci包含C:\...path...\folder在其搜索路径中,因此即使它不是当前目录B.hsA.hs也可以在那里找到。