【问题标题】:Haskell-mode not working for my project, can't find moduleHaskell 模式不适用于我的项目,找不到模块
【发布时间】:2014-06-26 23:13:26
【问题描述】:

这是我的场景:

我正在开发一个包含以下目录/模块的项目:

|--proj
   |-- src
       |-- Foo
           |-- FooModule1.hs
           |-- FooModule2.hs
       |-- Bar
           |-- BarModule1.hs

BarModule1.hs 看起来像这样:

module BarModule1 where

import Foo.FooModule1
...

我还有一个.cabal 文件将src 指定为hs-source-dirs,当然这两个模块都在其中列出。

当我在 Emacs 中的文件 BarModule1.hs 中执行 C-c C-l 时,它会说:

proj/src/Bar/BarModule1.hs:3:8:
    Could not find module `Foo.FooModule1'
    Use -v to see a list of the files searched for.
Failed, modules loaded: none.

我还想将hlintflymake-haskell-multi-load 一起使用,如果我用M-x flymake-haskell-multi-load 激活该模式,hlint 将始终显示找不到模块@ 的错误987654333@,因为它不知道.cabal 文件,我在其中指定了hs-source-dirs: src

所以我的问题是:我怎样才能让haskell-modeflymake/hlint 了解我的项目目录/模块树,以便它找到所有模块?

或者,我怎样才能让他们知道我的.cabal 文件中指定的模块?

【问题讨论】:

  • 如果您使用的是 cabal 文件,那么为什么不使用 cabal 本身呢?首先确保您当前的缓冲区是与 .cabal 文件位于同一文件夹中的文件,然后是 C-u M-x compile RET cabal repl RET
  • 你使用的是什么版本的haskell-mode?最新和最伟大的是非常了解阴谋集团。同样适用于 ghc-mode IIRC
  • C-u M-x compile RET cabal repl RET 适用于 repl 但不能修复 flymake/hlint 问题我使用的是 haskell-mode 13.7

标签: haskell emacs haskell-mode


【解决方案1】:

至于 haskell-mode 在你的 emacs 初始化文件中将 haskell-process-type 设置为 cabal-repl 并确保使用 interactive-haskell-mode(而不是 inf-haskell-mode):

(add-hook 'haskell-mode-hook 'interactive-haskell-mode)
(setq haskell-process-type 'cabal-repl)

【讨论】:

    【解决方案2】:

    我的 emacs 配置基于Emacs Prelude。我还使用cabal sandbox init为项目创建沙箱。

    对于类似的项目结构haskell-mode 效果很好。我能够 C-c C-l 将当前文件加载到 repl 中而不会出错。但是flycheck 无法解析所有模块并突出显示有错误的import 语句:

    Could not find module ‘Foo.FooModule1’
    Use -v to see a list of the files searched for.
    

    解决方案存在问题Support Cabal sandboxes in GHC #293。您需要在提供必要变量的proj 根目录中创建.dir-locals.el

    ((haskell-mode
      (flycheck-ghc-package-databases "/path/to/proj/.cabal-sandbox/x86_64-osx-ghc-7.6.3-packages.conf.d/")
      (flycheck-ghc-no-user-package-database . t)
      (flycheck-ghc-search-path "/path/to/proj/src")))
    
    • flycheck-ghc-package-databases - 是cabal.sandbox.config(您可能需要先创建沙箱)package-db 设置
    • flycheck-ghc-search-path - 是到 proj/src 的路径

    【讨论】:

      【解决方案3】:

      在 ghci 中的提示符下::set -iproj/src/

      【讨论】:

      • 这解决了 C-c C-l 问题,谢谢。但是,带有 hlint 的 flymake 不会受到它的影响,并且仍然会用“Could not find Module”标记第一个导入行
      猜你喜欢
      • 2017-07-27
      • 2015-04-25
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2023-03-15
      相关资源
      最近更新 更多