在emacs中,stack-ghci无法加载接口文件,但是从命令行执行`stack build`

时间:2017-08-14 23:01:23

标签: haskell emacs haskell-stack

我可以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 个答案:

答案 0 :(得分:5)

我能够使用stack build编译您的项目(当然,在安装了一些系统范围的依赖项,如llvm,cuda,fftw3等)之后,在emacs中加载C-c C-l。 / p>

以下是适用于我的最小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模式知道堆栈的位置,以防它安装在非公共位置:(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中并使用我的系统安装{{1而不是gcc中的一个。
  • 如果您使用除RHEL6.3之外的其他一些emacs软件包,它们也可能是问题的原因。我已经使用haskell-modeintero对其进行了测试,没有任何问题。
  • 尝试升级到最新的flycheckstack upgrade,这可能会有所帮助。我已在haskell-mode
  • 上使用stack-1.5.1haskell-mode-20170824.1124进行了测试