0

我正在尝试让emacs haskell-modecabal项目一起工作。每当我尝试以交互方式编译或加载文件时,我都会在haskell-process-log

编译(通过(Cc Cc)):

cabal.exe:没有给定目标并且当前目录中没有包。

并且在加载时(通过(Cc Cl)):

cabal.exe:“--ghc-option=-ferror-spans”的无法识别的目标语法


设置:Windows 10、GHC 8.10.2、Cabal 3.2.0.0、emacs 27.1、haskell-mode 20201120.755

我的 emacs 初始化文件有以下内容:

(require 'haskell-interactive-mode)
(require 'haskell-process)
(add-hook 'haskell-mode-hook 'interactive-haskell-mode)

(eval-after-load "haskell-mode"
    '(define-key haskell-mode-map (kbd "C-c C-c") 'haskell-compile))

(eval-after-load "haskell-cabal"
    '(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-compile))

使用一个简单的 Haskell 项目,通过运行创建cabal init

即带有Main.hs

module Main where

main :: IO ()
main = putStrLn "Hello, Haskell!"

my-project.cabal

cabal-version:       >=1.10
-- Initial package description 'my-project.cabal' generated by
--  'cabal init'.  For further documentation, see
-- http://haskell.org/cabal/users-guide/

name:                my-project
version:             0.1.0.0
-- synopsis:
-- description:
-- bug-reports:
-- license:
license-file:        LICENSE
author:              ################
maintainer:          ##################
-- copyright:
-- category:
build-type:          Simple
extra-source-files:  CHANGELOG.md, README.md

executable my-project
  main-is:             Main.hs
  -- other-modules:
  -- other-extensions:
  build-depends:       base >=4.14 && <4.15
  hs-source-dirs:      
  default-language:    Haskell2010

如果我尝试通过编译,C-c C-c我会在haskell-process-log缓冲区中得到以下内容:

cabal.exe:没有给定目标并且当前目录中没有包。 对项目中的所有包使用目标“全部”,或按名称或位置
指定包或组件。 有关目标选项
的更多详细信息,请参阅“cabal build --help” 。

如果我尝试通过C-c C-lhaskell 进程加载,则会立即死亡,提示我重新启动并且 haskell-process-log 显示:

cabal.exe:“--ghc-option=-ferror-spans”的目标语法无法识别。

在我的初始化文件自定义变量中使用'(haskell-process-log t)'(haskell-process-show-debug-tips t)设置,这将更改为:

("Starting inferior `cabal repl' process using cabal ..." "my-project" nil "cabal" "repl" " --ghc-option=-ferror-spans")
-> Prelude.putStrLn ""
   :set -v1
   :set +c
-> :set prompt "\4"
-> :set prompt-cont "λ| "
<- cabal.exe: Unrecognised target syntax for ' --ghc-option=-ferror-spans'.
Event: "exited abnormally with code 1 "
Process reset.

在处理单独的 haskell 文件时,在 emacs 中一切正常,即不在 cabal 项目中。

通过命令行编译和cabal repl在 cabal 项目中也可以正常工作。

我一直在搜索文档并在谷歌上搜索了整整一天半。任何帮助,将不胜感激。

4

1 回答 1

2

事实证明这是Cabal中的一个错误。特别是在 cabal-install 命令行工具中,由于 Windows 用大写字母表示驱动器号,该工具阻止了 Windows 上主程序包的自动检测。

我已经提交了一个拉取请求:

https://github.com/haskell/cabal/pull/7310

于 2021-03-01T11:37:29.363 回答