sublime text不提供haskell语法提示,必须依赖haskell-language-server(hls)驱动;旧插件如sublimehaskell因依赖已淘汰的ghc-mod,在st4中完全失效,仅剩高亮无类型推导、hover或跳转功能。

Sublime Text 本身不提供 Haskell 语法提示,必须靠 haskell-language-server(HLS)驱动;装错插件、没装 HLS、或项目结构缺失,都会导致“有高亮无提示”。
为什么装了 SublimeHaskell 或 Haskell-Sublime 却没类型提示
这些老插件依赖已淘汰的 ghc-mod,而 ghc-mod 在 Sublime Text 4 中完全失效——ST4 移除了 Python 2 支持,ghc-mod 启动即卡死或静默退出。你看到的语法高亮只是 Sublime 自带的着色规则,和类型推导、hover 提示、跳转定义毫无关系。
实操建议:
- 卸载
SublimeHaskell、Haskell-Sublime、haskell-ghc-mod等所有旧插件 - 通过 Package Control 安装
LSP(不是LSP-haskell,后者已废弃) - 确认系统已安装
haskell-language-server:终端执行haskell-language-server --version必须有输出 - 项目根目录必须存在
.cabal或package.yaml,否则 HLS 启动失败且不报错
如何让 hover 显示完整类型签名(含 forall 和约束)
默认 HLS 会简化类型显示,比如把 sort :: forall a. Ord a => [a] -> [a] 缩成 sort :: Ord a => [a] -> [a],省略量词和括号,这对调试类型错误很不利。
实操建议:
- 在项目根目录新建
hie.yaml,内容为:cradle: direct: arguments: [] - 同级新建
hls.yaml(HLS v2.1+ 才识别),内容为:plugins: ghcide: typecheck: showFullTypes: true - 按
Ctrl+Shift+P→ 输入LSP: Restart Servers,等右下角出现HLS ready
Ctrl+Click 跳转总跳进 GHC 源码,而不是你的模块
这不是插件问题,是 HLS 解析范围受限:它只索引当前 package 声明的依赖。如果你 import Data.MyModule,但 .cabal 的 build-depends 没写对应包名,HLS 就 fallback 到 GHC 内置模块。
实操建议:
- 检查
.cabal文件中build-depends是否列全了所有import的第三方包 - 本地开发的其他库,必须用
path:方式引入,例如:my-utils: path: ../my-utils - 改完
.cabal后,必须重启 Sublime(不是 reload project),因为 HLS 进程绑定的是启动时的路径 - 验证方式:打开一个
.hs文件,按Ctrl+Shift+P→Haskell: Restart Server,看状态栏是否恢复HLS ready
保存后没自动格式化,stylish-haskell 配置无效
Sublime 的 LSP 插件默认把格式化交给 HLS 处理,而 HLS 默认只认 ormolu、floskell、fourmolu,完全无视 stylish-haskell。即使你本地装了,HLS 也跳过它。
实操建议:
- 确保
ormolu已安装且在$PATH:运行ormolu --version应有输出 - 在
hie.yaml中显式指定格式器,例如:cradle: cabal: - path: "./" component: "lib:your-pkg-name" options: formattingProvider: ormolu - 不要混用 Sublime 构建系统调用
stylish-haskell,会破坏 LSP 的语义一致性,补全和诊断可能失步
最容易被忽略的一点:Windows 用户路径含空格或中文时,HLS 启动直接失败,报 Failed to parse result of calling cabal;macOS 用户从 Dock 双击启动 Sublime,常因没继承 shell 的 PATH 导致找不到 haskell-language-server——务必用终端执行 subl . 打开项目。











