在Emacs中,stack-ghci无法加载接口文件,但是从命令行运行的`stack build`可以。

7

我可以使用命令行进行stack build项目,但是当我尝试在emacs中使用C-c C-l时(使用(custom-set-variables '(haskell-process-type 'stack-ghci))),我会收到一个错误,指出我导入的所有包模块都找不到。

/home/amcp011/bec/amcp011/accelerate/gpe/src/Numeric/GPE/Utils.hs:30:1: error:
    Failed to load interface for ‘Data.Array.Accelerate’
    Locations searched:
      Data/Array/Accelerate.hs
      Data/Array/Accelerate.lhs
      Data/Array/Accelerate.hsig
      Data/Array/Accelerate.lhsig
      /home/amcp011/bec/amcp011/accelerate/gpe/src/Data/Array/Accelerate.hs
      /home/amcp011/bec/amcp011/accelerate/gpe/src/Data/Array/Accelerate.lhs
      /home/amcp011/bec/amcp011/accelerate/gpe/src/Data/Array/Accelerate.hsig
      /home/amcp011/bec/amcp011/accelerate/gpe/src/Data/Array/Accelerate.lhsig

gpe.cabal:

build-depends:       base >= 4.7 && < 5
                   , bytestring
                   , bytestring-conversion
                   , mtl
                   , time
                   , filepath
                   , directory
                   , accelerate
                   , accelerate-io

stack.yaml:

extra-deps: [accelerate-1.0.0.0
            ,accelerate-io-1.0.0.0
            ]

1
你有这个项目的公共链接吗?没有示例很难进行调试... - Alec
@Alec:https://github.com/amcphail/gpe 这个项目还没有完成,我是为了回应你的评论而上传的。我现在处于开发阶段,需要在emacs中加载文件来帮助开发。 - vivian
1个回答

5
我能够使用stack build编译您的项目(当然,在安装了一些系统级依赖项,如llvm、cuda、fftw3等之后),并且在emacs中使用C-c C-l成功加载它。
以下是我使用的最小化emacs配置:
(defun haskell-mode-setup ()
  (setq haskell-process-type 'stack-ghci))

(add-hook 'haskell-mode-hook 'interactive-haskell-mode)
(add-hook 'haskell-mode-hook 'haskell-mode-setup)

我能够复制你遇到的问题的唯一方法是使用inf-haskell-mode,而不是interactive-haskell-mode,以及简单地设置(setq haskell-process-type 'ghci)。因此,可能是emacs找不到stack
我建议尝试让haskell-mode知道stack在哪里,以防它安装在非常规位置:(setq haskell-process-path-stack "/path/to/stack")
另外,过去我解决了一些与$PATH环境变量相关的问题,这些问题与当前用户设置的环境变量不同,而是使用系统范围内的环境变量。只需安装exec-path-from-shell emacs包,并将(exec-path-from-shell-initialize)添加到~/.emacs中。
此外,如果您还没有这样做,检查haskell-mode日志可能会证明有用。将(setq haskell-process-log t)添加到haskell-mode-setup中,这将导致一个带有日志的额外缓冲区。
备注:
  • 为了编译您的软件包,我必须从stack.yaml中删除几行,即包括本地目录/home/amcp011/local/的行,这些行未包含在repo中,并使用我系统安装的gcc而不是来自RHEL6.3gcc
  • 如果除了haskell-mode之外还使用其他emacs包,它们也可能是问题的原因。我已经测试过interoflycheck没有任何问题。
  • 尝试升级到最新的stack upgradehaskell-mode,也许会有所帮助。我已经在emacs-25.2.2上测试了stack-1.5.1haskell-mode-20170824.1124

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接