我正在从事一个项目,并且我使用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
如何让它找到我项目的文件?
答案 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
可以成功编译。
结论:您确定导入正确吗?