GHCi找不到我程序的模块

时间:2014-10-17 06:43:04

标签: haskell emacs cabal

我正在从事一个项目,并且我使用Cabal进行管理。我已经指定了源文件,模块,所有东西的目录。我的所有文件都与相应的模块具有相同的名称,保留了大小写。

我能做到:

$ cabal configure
$ cabal build

没问题。

但是,假设我在文件Module中有一个模块Module.hs,在同一目录中有一个文件File.hs。现在,当我尝试从Emacs加载File.hs进行测试时,我得到以下信息:

____Could not find module ‘Module’
    It is a member of the hidden package ‘ghc-7.8.3’.
    Use -v to see a list of the files searched for.
Failed, modules loaded: none.

File.hs的完整内容:

module File where
import Module

如何让它找到我项目的文件?

3 个答案:

答案 0 :(得分:5)

您可以通过Cabal启动REPL,如下所示:

#cutal repl

这与运行ghci相同,但会考虑cabal安装本地或沙箱包存储库所安装的任何其他依赖项。

答案 1 :(得分:4)

您需要告诉GHCi在哪里找到您的源文件。例如,如果您的项目目录是./foo并且您在./foo/src中有源文件,则需要说明(从您的项目目录中):

:set -isrc

在GHCi的命令提示符下。然后,您将可以访问加载了C-c C-l的源文件中的私有成员。

您还需要确保没有cabal install编辑包,否则将加载包,而不是项目源文件。

答案 2 :(得分:0)

我遇到了同样的问题,修复了它,并决定写下我的故障排除。这可能有助于新人学习 Haskell。继续阅读。

我正在玩这个示例代码。

http://zvon.org/other/haskell/Outputdirectory/getCurrentDirectory_f.html

代码:

import Directory 

main = aaa "/tmp/FOO"

aaa ddd = do createDirectory ddd
        setCurrentDirectory ddd
        d <- getCurrentDirectory
        print d
        writeFile "aaa" "HELLO"
        l <- getDirectoryContents d
        print l

我注意到他们正在使用这个包。

https://hackage.haskell.org/package/directory-1.3.6.2/docs/System-Directory.html

所以我用这个命令安装了它:

cabal update
cabal install directory

使用 ghc 编译示例代码失败并显示此错误消息。

    Could not find module `Directory'
    Use -v to see a list of the files searched for.
  |
4 | import Directory
  | ^^^^^^^^^^^^^^^^

我被卡住了一段时间,直到我将导入行更改为:

import System.Directory

此更改后 ghc 可以成功编译。

结论:您确定导入正确吗?