加载具有依赖项的Haskell模块

时间:2016-05-03 01:15:56

标签: haskell import ghc ghci

我不确定我的问题在这里。我有三个模块A.hs,B.hs和C.hs.所有都位于C:\..path...\folder,模块B和C都从A。

导入

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

我可以在gchi中:l C:\..path..\folder\A.hs并播放其内容;但是,当我尝试:l C:\..path..\folder\B.hs:l C:\..path..\folder\C.hs

时,ghci会出现以下错误
    Could not find module `A'
    Use -v to see a list of the files searched for.
Failed, modules loaded: none.

我觉得奇怪,因为我编译B.hs到B.exe并运行可执行文件没有问题。如何编译和运行一个我无法加载到ghci的模块?或者,为什么导入在编译时成功但在加载时失败;特别是当导入的模块本身可以加载时?

1 个答案:

答案 0 :(得分:4)

默认情况下,ghci仅在当前目录中搜索导入的模块。首先,当前目录是用于启动ghci的目录;但可以使用ghci命令在:cd内进行更改。因此,你可以

> :cd C:\...path...\folder
> :l B.hs

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

% ghci -iC:\...path...\folder
> :l B.hs

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