Atom配置Haskell已不再推荐,因核心插件停更、ghc-mod不兼容GHC 8.10+,唯一可行方案是atom-ide-ui配合haskell-language-server(HLS),需严格对齐GHC/HLS/项目配置版本。

Atom 配置 Haskell 已不再推荐——核心插件(如 haskell-ghc-mod、ide-haskell)早已停止维护,依赖的 ghc-mod 在 GHC 8.10+ 后彻底失效,且与当前主流工具链(haskell-language-server / HLS)不兼容。强行配置大概率遇到 ENOENT、mod failed to launch 或类型检查静默失败。
如果你仍需在 Atom 中启用基础 Haskell 支持,以下路径是目前唯一可行的最低限度方案:
用 atom-ide-ui + haskell-language-server 替代已废弃插件
Atom 官方 IDE 框架 atom-ide-ui 支持 LSP(Language Server Protocol),而 haskell-language-server(HLS)是当前 Haskell 社区唯一活跃维护的语言服务器。
- 先通过
ghcup安装最新版HLS:ghcup install hls(会自动匹配你当前 GHC 版本) - 安装 Atom 插件:
atom-ide-ui(必须)、language-haskell(语法高亮)、atom-ide-haskell(注意:不是ide-haskell,后者已废弃) -
atom-ide-haskell的配置页中,“Server Path” 填入haskell-language-server可执行文件路径,例如:/Users/xxx/.ghcup/bin/haskell-language-server-8.10.7(版本号需与你项目 GHC 一致) - 确保项目根目录有
stack.yaml或cabal.project,否则HLS启动后会报no project found
为什么 ghc-mod 路径配置总是失败?
因为 ghc-mod 自 2018 年起就不再适配 GHC 8.6+,而你现在几乎肯定在用 GHC 9.x 或至少 8.10+。即使你绕过安装报错强行填入路径,haskell-ghc-mod 插件调用时也会立即崩溃并输出类似 ghc-mod: error while loading shared libraries: libtinfo.so.5: cannot open shared object file 或直接静默退出。
- 不要尝试用
cabal install ghc-mod—— 它现在连编译都通不过 - 不要手动下载旧二进制 —— 即使跑起来,也无法解析现代语言扩展(如
OverloadedLabels、QuantifiedConstraints) -
ghc-modi字段已完全无意义,HLS不使用该协议
符号跳转(cmd+r)和类型提示失效怎么办?
这是 Atom 内置 symbols-view 和老插件 ide-haskell-hasktags 共同导致的典型症状:前者依赖 ctags,后者依赖已停更的 hasktags,二者均无法处理 Cabal v3 / Stack 2.9+ 的多包工作区结构。
- 停用
ide-haskell-hasktags和所有带hasktags的插件 - 改用
HLS提供的 LSP 跳转:光标放在函数名上按ctrl-click(macOS 是cmd-click),或右键 → “Go to Definition” - 类型提示靠悬停实现:鼠标停在标识符上,等待 0.5 秒左右,底部状态栏会显示类型签名(前提是
HLS正常运行且无解析错误) - 若悬停无反应,检查 Atom 开发者工具(
View > Developer > Toggle Developer Tools)Console 中是否有LSP connection closed或haskell-language-server exited with code 1
Stack 项目里 HLS 总是找不到模块?
HLS 启动时会读取项目配置,但 Atom 插件不会自动继承 shell 环境变量(比如 PATH 或 STACK_YAML),尤其在 macOS GUI 启动 Atom 时(非终端中执行 atom .)。
- 务必从终端启动:
atom .,而非双击图标 - 确认
stack.yaml在当前工作目录,且其中resolver:字段与ghcup list显示的已安装 GHC 版本匹配 - 如果用
cabal项目,需确保cabal.project存在且包含packages:条目,否则HLS会认为这是单文件项目,不加载依赖 - 临时调试可手动运行:
haskell-language-server --debug src/Main.hs,看是否报Could not load module ‘Data.Text’类错误 —— 这说明环境未正确初始化
stack.yaml 里写 resolver: lts-20.24,而 ghcup list 里根本没有对应 GHC 9.2.8,HLS 就根本不会启动 —— 这类细节不会报错,只会沉默。

















