gpt4 book ai didi

emacs中的haskell repl

转载 作者:行者123 更新时间:2023-12-02 01:44:12 28 4
gpt4 key购买 nike

嗨,我从 haskell 开始,并尝试设置我的 emacs 以进行开发。

我有 haskell-modghc-mod最新 emacs 24.3.1 . GHC 是 7.6.3
我创建了一个 haskell 文件 first.hs,当我创建 C-c C-l它问:

start a new project named haskell ? y or n

我的目录名称是haskell。我按y
Set the cabal directory

我已尝试使用 ~/.cabal 和我当前名为 haskell 的目录
Set the current directory

只需按 Enter,因为它有 haskell 目录

它显示错误消息:
haskell-process-start: cl-ecase failed: cabal-rep, (ghci quote cabal-repl quote cabal-ghci quote cabal-dev quote)

我怎样才能得到repl?

我读到我可能需要降级 ghc 版本才能使其工作。
那是很好的解决方案吗?

解决方案 :

我有多个 custom-set-variables在 init.el 中,它导致了问题。

最佳答案

2017 年更新

现在我们有 Intero我建议你试试 Intero/Stack——它工作得很好。

有了它,我的配置更加精简:

;; ----------------------------------------------------------------------
;; HASKELL
(require 'haskell-mode)
(require 'intero)
(add-hook 'haskell-mode-hook 'intero-mode)
(require 'flycheck)
(setq flycheck-check-syntax-automatically '(save new-line))
(flycheck-add-next-checker 'intero '(warning . haskell-hlint))

关于 回复 你基本上只是加载文件然后 C-c C-l进入repl(你总是可以用 C-c C-z在两个窗口之间切换,你可以用 C-c C-k清除repl-buffer(当在里面时)。

唯一的缺点是 Intero 通常安装在您的项目本地,因此第一次启动新项目需要一段时间让 Intero 下载/编译/启动 - 但这没什么大不了的,您会收获很多。

更新

现在 stack运行良好我建议设置 haskell-process-typeauto并且可能安装 ghc-mod使用堆栈。

这是我正在使用的当前设置:
(require 'haskell-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
(add-hook 'haskell-mode-hook 'linum-mode)
(add-to-list 'exec-path "~/.local/bin")
(eval-after-load 'haskell-mode '(progn
(define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-file)
(define-key haskell-mode-map (kbd "C-c C-n C-t") 'haskell-process-do-type)
(define-key haskell-mode-map (kbd "C-c C-n C-i") 'haskell-process-do-info)
(define-key haskell-mode-map "\C-ch" 'haskell-hoogle)))
(eval-after-load 'haskell-cabal '(progn
(define-key haskell-cabal-mode-map (kbd "C-c C-k") 'haskell-interactive-ode-clear)
(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
(define-key haskell-cabal-mode-map (kbd "C-c c") 'haskell-process-cabal)))

(require 'company-ghci)
(push 'company-ghci company-backends)
(add-hook 'haskell-mode-hook 'company-mode)
(add-hook 'haskell-interactive-mode-hook 'company-mode)

如您所见,我基本上摆脱了所有 ghc-mod相关的东西(堆栈与当前的 haskell-mode 一样工作)并替换了 company后端(虽然这个真的很慢,我希望能找到更好的东西)

变量

您通常在 Emacs/Haskell-Mode 的配置中设置的论文
(custom-set-variables
;; there is of course more in here - these are the Haskell related:
'(haskell-font-lock-symbols (quote unicode))
'(haskell-hoogle-command nil)
'(haskell-mode-hook
(quote
(linum-mode turn-on-haskell-indentation turn-on-haskell-doc-mode)) t)
'(haskell-process-auto-import-loaded-modules t)
'(haskell-process-load-or-reload-prompt t)
'(haskell-process-log t)
'(haskell-process-suggest-language-pragmas nil)
'(haskell-process-suggest-no-warn-orphans t)
'(haskell-process-type (quote auto))
'(haskell-process-use-presentation-mode t)
'(haskell-tags-on-save t)
'(inferior-haskell-wait-and-jump t)
'(safe-local-variable-values
(quote
((haskell-process-use-ghci . t)
(haskell-indent-spaces . 4))))
(uniquify)))

这些是我添加的包:
  • haskell 模式
  • 公司(不是 Haskell 相关的,而是依赖项)
  • 公司- cabal
  • 公司-ghci
  • ghci 完成
  • 莎士比亚模式(适用于 Yesod)
  • company-quickhelp (为了更好地展示 :i )


  • 第一的

    如果它要求您提供 cabal 目录 - 它想知道你的 myProject.cabal文件是-如果您没有文件,只需获取文件所在的文件夹(默认值-我认为默认值/查找到现在为止从未让我失望)。

    如果你需要一些 sample-.emacs-setup

    以下是我的 .emacs 中的部分内容适合我的文件:
    (autoload 'ghc-init "ghc" nil t)
    (autoload 'ghc-debug "ghc" nil t)
    (add-hook 'haskell-mode-hook (lambda () (ghc-init)))
    (add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)

    (eval-after-load 'haskell-mode '(progn
    (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-or-reload)
    (define-key haskell-mode-map (kbd "C-`") 'haskell-interactive-bring)
    (define-key haskell-mode-map (kbd "C-c C-n C-t") 'haskell-process-do-type)
    (define-key haskell-mode-map (kbd "C-c C-n C-i") 'haskell-process-do-info)
    (define-key haskell-mode-map (kbd "C-c C-n C-c") 'haskell-process-cabal-build)
    (define-key haskell-mode-map (kbd "C-c C-n c") 'haskell-process-cabal)))
    (eval-after-load 'haskell-cabal '(progn
    (define-key haskell-cabal-mode-map (kbd "C-`") 'haskell-interactive-bring)
    (define-key haskell-cabal-mode-map (kbd "C-c C-k") 'haskell-interactive-ode-clear)
    (define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
    (define-key haskell-cabal-mode-map (kbd "C-c c") 'haskell-process-cabal)))

    (custom-set-variables
    '(haskell-interactive-mode-hide-multi-line-errors nil)
    '(haskell-process-log t)
    '(haskell-process-type (quote cabal-repl)))

    请注意带有 (quote cabal-repl) 的部分- 这应该适用于 cabal 沙箱。
    此外,这会将更多日志信息添加到名为 haskell-process-log 的缓冲区中,您可能会在其中找到有关您的问题的更多信息。

    我将它与 ghc-mod version 5.1.0.2 compiled by GHC 7.8.3 一起使用和 GHC 7.8.3 显然。

    当然,您必须确保您的 .cabal文件夹和 ghc-mod的地方在你的路径中(我认为你也可以在 emacs 设置中的某个地方配置它 - 但这样更容易)。

    评论
  • 你必须安装包ghc在 emacs 中不是 ghc-mod .
  • 我之前在使用不同版本的 ghc-mod 和 emacs 包时遇到了问题 - 所以请确保您使用 cabal-install 获得最新版本,然后重新安装 emacs-package(不过,这只是我解析 ghc-输出的问题)

  • 更多信息

    如果这对您没有帮助,请随时
  • 添加评论
  • 看看happy haskell programming page
  • 看看ghc wiki on emacs

  • 在我的机器上运行示例

    我编辑了一个这样的示例文件:

    Helo Emacs

    然后我按 C-c C-l 并按 y:

    Step 2

    并接受文件夹(这是文件所在的位置)和 Ret 的任何其他问题 - 现在您应该看到 *haskell*带有友好消息/lambda 的缓冲区:

    Step 3

    最后我可以检查文件是否已加载:

    enter image description here

    关于emacs中的haskell repl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26603649/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com