Ash*_*egi 8 emacs haskell read-eval-print-loop haskell-mode
嗨,我开始使用haskell,并尝试设置我的emacs进行开发.
我已经haskell-mod和ghc-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
Run Code Online (Sandbox Code Playgroud)
我的目录名是haskell.我按了y
Set the cabal directory
Run Code Online (Sandbox Code Playgroud)
我已尝试使用〜/ .cabal和我当前的目录命名 haskell
Set the current directory
Run Code Online (Sandbox Code Playgroud)
只需按下输入,因为它有haskell目录
它显示错误消息:
haskell-process-start: cl-ecase failed: cabal-rep, (ghci quote cabal-repl quote cabal-ghci quote cabal-dev quote)
Run Code Online (Sandbox Code Playgroud)
如何获得repl?
我读到我可能需要降级ghc版本才能使其正常工作.那是好的解决方案吗?
方案:
我custom-set-variables在init.el中有多个,它导致了问题.
Car*_*ten 13
现在我们有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))
Run Code Online (Sandbox Code Playgroud)
关于REPL你基本上只是加载文件然后C-c C-l进入repl(你总是可以在两个窗口之间切换C-c C-z,你可以清除repl-buffer C-c C-k(当在里面时).
唯一的缺点是Intero通常安装在你的项目本地,所以第一次启动到一个新项目需要一段时间才能让Intero下载/编译/启动 - 但这没什么大不了的,你获得了很多.
现在stack已经运行良好,我建议设置haskell-process-type到auto并可能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)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我基本上摆脱了所有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)))
Run Code Online (Sandbox Code Playgroud)
这些是我添加的包:
:i)如果它要求你的cabal目录 - 它想知道你的myProject.cabal文件在哪里- 如果你没有一个只是拿你的文件所在的文件夹(默认 - 我认为默认/发现从来没有让我失望,直到现在).
以下是我.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)))
Run Code Online (Sandbox Code Playgroud)
请注意部分(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.如果这对你没有帮助,请随意
我编辑了一个这样的示例文件:

然后我点击Cc Cl并按y:

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

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

| 归档时间: |
|
| 查看次数: |
5313 次 |
| 最近记录: |