11

这是我的场景:

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

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

BarModule1.hs看起来像这样:

module BarModule1 where

import Foo.FooModule1
...

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

当我BarModule1.hs在 Emacs 中的文件中并且我这样做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.

我也想使用hlintwith flymake-haskell-multi-load,如果我用 激活该模式M-x flymake-haskell-multi-loadhlint将始终显示它找不到模块的错误Foo.FooModule1,因为它不知道.cabal我在其中指定的文件hs-source-dirs: src

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

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

4

3 回答 3

4

至于在您的 emacs 初始化文件中haskell-mode设置并确保使用(not ):haskell-process-typecabal-replinteractive-haskell-modeinf-haskell-mode

(add-hook 'haskell-mode-hook 'interactive-haskell-mode)
(setq haskell-process-type 'cabal-repl)
于 2014-07-30T20:32:08.693 回答
3

我的 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.

在 GHC #293 中有一个问题Support Cabal 沙盒与解决方案。您需要在提供必要变量.dir-locals.el的根目录中创建。proj

((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
于 2015-01-01T11:33:51.367 回答
2

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

于 2014-06-27T00:17:09.980 回答