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))
关于REPL你基本上只是加载文件然后C-c C-l
进入 repl (你可以随时在两个窗口之间切换C-c C-z
你可以用以下命令清除 repl-bufferC-c C-k
(在里面时)。
唯一的缺点是 Intero 通常安装在您的项目本地,因此首次启动新项目将需要一段时间 Intero 来下载/编译/启动 - 但这没什么大不了的,您会收获很多。
UPDATE
现在stack
已经出来并且运行得很好我建议设置haskell-process-type
to 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)
正如你所看到的,我基本上摆脱了所有ghc-mod
相关的东西(stack与当前一样工作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 不相关,而是依赖项)
- 公司阴谋集团
- 公司-ghci
- ghci 完成
- 莎士比亚模式(适用于 Yesod)
- 公司快速帮助(用于很好地显示
:i
)
First
如果它要求你阴谋集团目录- 它想知道你在哪里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)
- 这应该适用于阴谋集团沙箱。
此外,这还将向名为的缓冲区添加更多日志记录信息Haskell 进程日志您可能会在其中找到有关您的问题的更多信息。
我用这个ghc-mod version 5.1.0.2 compiled by GHC 7.8.3
显然是 GHC 7.8.3。
当然,您必须确保您的.cabal
文件夹和位置ghc-mod
在你的路径中(我认为你也可以在 emacs 设置中的某个地方配置它 - 但这样更容易)。
remarks
- 你必须安装这个包
ghc
在 emacs 中不是ghc-mod
.
- 我之前在使用不同版本的 ghc-mod 和 emacs 软件包时遇到过问题 - 所以请确保您使用 cabal-install 获得最新版本,然后重新安装 emacs-package (不过,这只是我解析 ghc-output 的问题)
更多信息
如果这对您没有帮助,请随时
- 添加评论
- 看看快乐的 Haskell 编程页面
- 看看emacs 上的 ghc 维基
在我的机器上运行示例
我编辑了一个示例文件,如下所示:
然后我按 C-c C-l 并按 y:
并接受该文件夹(这是文件所在的位置)和任何其他问题与 Ret - 现在您应该看到*haskell*
带有友好消息/lambda 的缓冲区:
最后我可以检查文件是否已加载: