如何让Cabal构建Haskell项目时先全量类型检查再因Typed Holes报错?
解决Typed Holes导致cabal提前终止类型检查的问题
用GHC全局编译选项强制检查所有模块
给GHC加上-fno-stop-at-first-error参数,让它遇到错误不立刻停止,把所有模块的问题都列出来再失败。- 全局生效:在项目根目录的
cabal.project文件里添加这段配置:package * ghc-options: -fno-stop-at-first-error - 单个目标生效:在你的
.cabal文件的library或executable块里添加:library ghc-options: -fno-stop-at-first-error
之后运行
cabal build,就会先扫完所有模块的类型错误,最后再因为Typed Holes报错。- 全局生效:在项目根目录的
单独执行全量类型检查
要是只想先确认所有模块的类型是否正确,不想走完整构建流程,可以用这个命令:cabal build --ghc-options="-c -fno-stop-at-first-error"-c参数让GHC只做编译检查不生成产物,配合-fno-stop-at-first-error就能遍历所有模块,把所有类型错误和Typed Holes都列出来,不会中途中断。临时替换Typed Holes为占位实现
嫌改配置麻烦的话,也可以先把代码里的_换成占位代码,比如返回error "待实现"或者undefined,这样类型检查能通过,等所有模块都没类型问题了,再把占位符换回Typed Holes逐个实现。不过这个方法适合小项目,大项目改起来太费劲。
内容的提问来源于stack exchange,提问作者Ari Fordsham
相关产品推荐
相关产品推荐

