使用stack new创建的GHC 9.0.2项目为何导致语言服务器崩溃?
解决Stack项目中Haskell语言服务器(HLS)因GHC ABI不匹配崩溃的问题
问题本质
核心矛盾是Stack项目指定的GHC版本与本地已安装版本不兼容:
- 你通过GHCup默认安装了GHC 8.10.7,但
stack new生成的项目使用的LTS 19.16解析器对应GHC 9.0.2 - HLS需要与项目依赖的GHC版本严格匹配,版本不一致会直接触发ABI(应用二进制接口)冲突,导致崩溃
可行解决方案
方案1:修改Stack项目适配本地GHC版本
- 打开项目根目录的
stack.yaml文件 - 将
resolver字段替换为适配GHC 8.10.7的LTS解析器(比如LTS 18.x系列,对应GHC 8.10.7),例如:
或者直接指定本地已安装的GHC版本:resolver: lts-18.28resolver: ghc-8.10.7 - 执行
stack build同步依赖,重启HLS即可正常运行
方案2:安装Stack项目所需的GHC 9.0.2
若想保留默认的LTS 19.16解析器,可安装对应GHC版本:
- 使用GHCup安装GHC 9.0.2:
ghcup install ghc 9.0.2 - (可选)切换默认GHC版本到9.0.2:
ghcup set ghc 9.0.2 - 你的HLS v1.7.0.0支持GHC 9.0.x,无需升级,执行
stack build后重启HLS即可
方案3:让Stack自动管理GHC版本
Stack自带GHC版本管理能力,直接在项目根目录执行:
stack build
Stack会自动下载并安装解析器指定的GHC 9.0.2,完成后HLS即可识别并正常启动
额外提示
- HLS与GHC存在严格的版本对应关系,安装HLS时可通过
ghcup install hls --ghc <版本号>指定适配的GHC版本,避免冲突 - 用
stack ghc -- --version可查看当前Stack项目使用的GHC版本,确认与HLS适配
内容的提问来源于stack exchange,提问作者thisisrandy
相关产品推荐
相关产品推荐

