在 emacs 中,stack-ghci 无法加载接口文件,但命令行中的 `stack build` 可以
In emacs stack-ghci cannot load interface files but `stack build` from the command line does
我可以从命令行 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
]
我能够使用 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 知道堆栈在哪里,以防它安装在不常见的位置:(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.3
. 中的一个
- 如果您使用
haskell-mode
之外的其他一些 emacs 包,它们也可能是问题的原因。我用 intero
和 flycheck
测试过它没有任何问题。
- 尝试升级到最新的
stack upgrade
和 haskell-mode
,也许会有帮助。我已经在 emacs-25.2.2
上使用 stack-1.5.1
和 haskell-mode-20170824.1124
进行了测试
我可以从命令行 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
]
我能够使用 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 知道堆栈在哪里,以防它安装在不常见的位置:(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.3
. 中的一个
- 如果您使用
haskell-mode
之外的其他一些 emacs 包,它们也可能是问题的原因。我用intero
和flycheck
测试过它没有任何问题。 - 尝试升级到最新的
stack upgrade
和haskell-mode
,也许会有帮助。我已经在emacs-25.2.2
上使用
stack-1.5.1
和 haskell-mode-20170824.1124
进行了测试