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

VS Code中.cabal文件保存后自动还原为stack模板问题求助

问题现象

学习《Haskell Programming from First Principles》测试相关章节时出现异常:使用stack创建Haskell项目后,每次在Visual Studio Code中编辑项目对应的.cabal文件,执行保存操作后,文件都会自动回退为stack生成项目时创建的初始模板内容。

已完成的排查操作:

  • 关闭编辑器格式化功能后保存文件,问题复现
  • 在Mac系统自带备忘录应用中编辑.cabal文件并保存,重新在VS Code中打开项目,文件依然还原为初始模板

当前VS Code安装的Haskell相关工具:

  • 基础Haskell扩展
  • Haskell语法高亮扩展
  • Haskell调试扩展(目前尚未成功运行调试功能)
  • 代码自动格式化工具brittany
根本原因

该问题与VS Code格式化功能、brittany工具均无关,是stack默认启用的hpack自动配置生成机制导致:
通过stack模板新建的项目默认会在根目录生成package.yaml配置文件,只要触发stack相关操作(包括VS Code Haskell扩展自动执行的项目检查、依赖索引操作),stack就会根据package.yaml的内容全量覆盖生成同名.cabal文件,所有直接对.cabal文件的手动修改都会被覆盖,哪怕是在VS Code外部修改的内容也无法保留。

解决方案

根据个人使用习惯二选一即可:

  • 方案1(适配stack默认工作流,推荐):不直接编辑.cabal文件,所有依赖声明、编译选项、模块暴露规则等项目配置,全部修改到项目根目录的package.yaml文件中,保存后hpack会自动生成匹配的.cabal文件,不会出现内容回退问题。
  • 方案2(需手动维护.cabal文件时使用):
    1. 删除项目根目录下的package.yaml文件
    2. 打开项目根目录的stack.yaml文件,添加配置项hpack: false,关闭stack自动生成.cabal文件的功能
    3. 配置生效后再编辑.cabal文件,保存后内容不会再被自动覆盖

注意:选择方案2后,所有项目配置变更都需要手动修改.cabal文件完成,stack不会再自动同步配置内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:48:33