【问题标题】:GHCi cannot find modules of my programGHCi 找不到我的程序的模块
【发布时间】:2014-10-17 06:43:04
【问题描述】:

我正在处理一个项目,我正在使用 Cabal 进行管理。我已经指定了源文件、模块和所有东西的目录。我所有的文件都与它们对应的模块同名,大小写保留。

我能做到:

$ cabal configure
$ cabal build

没有问题。

但是,假设我在文件 Module.hs 中有一个模块 Module,并且在同一目录中有文件 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

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

【问题讨论】:

    标签: haskell emacs cabal


    【解决方案1】:

    您可以像这样通过 Cabal 启动 REPL:

    # 阴谋集团复制

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

    【讨论】:

    • 好吧,它只加载所有内容,而不是特定文件。我无法访问我正在处理的模块中的非公共函数。我喜欢做C-c C-l 并将当前模块加载到 GHCi 中,非常方便。也许有一种方法可以保存此工作流程...无论如何感谢您的回答。
    • 启动repl后,可以直接用:load导入单个源文件。即:load MyFile.hs 这将使您可以直接访问内部/私人成员
    • 还有:# stack repl
    【解决方案2】:

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

    :set -isrc
    

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

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

    【讨论】:

    • 完美!像魅力一样工作!
    【解决方案3】:

    我遇到了同样的问题,解决了它,并决定写下我的故障排除。这可能有助于新人学习 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可以编译成功。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 2017-06-29
      • 2021-12-01
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多