back

在编辑器里快乐编写 Haskell

2025-05-30

luisleee


准备

先要安装 ghc, hls, cabalstack, 最方便的方法不是通过包管理器从软件仓库安装, 而是使用 GHCup 来安装和管理版本. 使用 ghcup 管理版本时注意选择匹配的 ghchls 版本.

具体安装步骤参照 GHCup官网

安装时注意选项:

安装过程中或安装完成后可以选用中科大镜像来加速, 需要加速的仓库可能包括 ghcup, hackagestackage.

具体过程参照中科大源的帮助文档, 链接: GHCup, hackage, stackage.

作为构建和包管理工具, cabal 有时可能足够好了, 不过stack可以为不同的项目中配置不同的 Haskell 环境, 让软件在不同机器上的构建更为一致.

Helix

Helix 对 Haskell 来说基本上是开箱即用的. 只需要保证 hls 可执行文件的路径在 PATH 中就可以享受代码补全和语法高亮. 使用 hx --health haskell 即可检测 hls 状态.

但是代码格式化工具需要额外进行安装和配置.

这里选用 fourmolu 来格式化代码. 安装方式如下,

cabal install fourmolu

对应配置需要更改 ~/.config/helix/languages.toml, 在其中添加如下内容:

[[language]]
name = "haskell"
formatter = { command = "fourmolu", args = ["--stdin-input-file", "-"] }

保存后重启 Helix, 使用 :format 或缩略的 :fmt 命令即可享受代码格式化.

VS Code

VS Code 扩展商店有一套官方的 Haskell 插件, 但是体验上略有瑕疵.

选用 stack 进行构建需要等待其下载对应版本的 ghc, 建议 stack new 创建目录后再先安装完成再用 VS Code 打开目录. 选用 cabal 建议先 cabal init 创建工作目录后再打开.

这里需要的配置有:

注意, 语言服务启动可能需要一定时间.

添加新文件后代码补全会失效, 需要把新模块名加入 .cabal 配置文件的 exposed-modules (作为库) 或 other-modules (作为可执行文件) 字段, 然后重载窗口, 稍等片刻后语言功能才会生效.

Kate

很严肃地说, Kate 用起来都比 VS Code 的 Haskell 插件好用. LSP 开箱即用, 配置同 helix. 代码格式化甚至也无需配置.

back