You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在交互式Haskell-mode中加载带正确依赖的测试文件?

解决haskell-mode加载测试文件依赖失败的问题
  • 动态适配测试文件的启动参数
    通过在haskell-mode钩子中添加函数,自动识别当前文件是否在test目录,调整stack ghci的启动参数:
(defun my-haskell-set-test-target ()
  (when (string-match-p "/test/" (buffer-file-name))
    (setq haskell-process-args-ghci '("test"))))

(add-hook 'haskell-mode-hook #'my-haskell-set-test-target)

添加这段配置后,打开test目录下的文件时,haskell-mode会用stack ghci test启动REPL,此时再用C-c C-l加载文件就能获取到测试依赖(比如Test.Hspec)。

  • 手动切换目标并重启REPL
    如果需要在主代码和测试代码之间频繁切换,可以绑定快捷键手动切换目标:
(defun my-haskell-switch-to-test-target ()
  (interactive)
  (setq haskell-process-args-ghci '("test"))
  (haskell-process-restart))

(defun my-haskell-switch-to-main-target ()
  (interactive)
  (setq haskell-process-args-ghci '())
  (haskell-process-restart))

(global-set-key (kbd "C-c C-t") #'my-haskell-switch-to-test-target)
(global-set-key (kbd "C-c C-m") #'my-haskell-switch-to-main-target)

按下C-c C-t会切换到测试目标并重启REPL,C-c C-m切回主目标。

  • 全局设置测试目标(不推荐除非主要处理测试)
    如果日常大部分工作都在测试代码上,可以直接全局设置ghci启动参数:
(setq haskell-process-args-ghci '("test"))

但这样主目录的文件加载时会缺少主目标的依赖,仅适合长期专注测试开发的场景。

内容的提问来源于stack exchange,提问作者user2506946

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:05:03