使用Cabal data-files时Intero无法找到Paths模块
解决Intero无法识别Cabal生成的Paths_pkgname.hs问题
我之前也被这个问题卡了好一阵!当你启用Cabal的data-files功能时,它会自动在dist/build/autogen/目录下生成Paths_<你的包名>.hs模块,但Intero因为调用GHC的方式和普通GHCi不同,既找不到这个自动生成的文件,也没法自行生成它——之前给GHCi用的「创建伪文件+.ghci加路径」的技巧对Intero完全不适用,毕竟它是通过后台GHC API来工作的,.ghci的配置根本影响不到它。
下面是两种亲测有效的解决办法:
方法一:让Intero自动识别Cabal的autogen目录
这是最优雅的方案,不需要手动创建伪文件:
- 在项目根目录下创建或编辑
cabal.project.local文件(这个文件是Cabal的本地配置,不会被版本控制追踪) - 添加以下内容,把
<你的包名>替换成你实际的包名称:package <你的包名> ghc-options: -idist/build/autogen - 保存文件后,重启Intero(比如在编辑器里重新加载项目),它就能自动找到
Paths_<你的包名>.hs了。
方法二:手动生成兼容Intero的伪Paths模块
如果方法一不生效,你可以手动创建一个简化版的Paths_<你的包名>.hs放在项目的源码目录里(注意不要提交到版本控制):
module Paths_<你的包名> where import Data.Version (Version(..)) -- 替换成你项目的实际版本号 version :: Version version = Version [0, 1, 0] [] -- 简化实现,仅用于Intero的类型检查 getDataFileName :: FilePath -> IO FilePath getDataFileName = return
这个伪模块实现了Intero需要的核心符号:version和getDataFileName,足够让它通过类型检查。当你用Cabal正常构建项目时,真实的自动生成模块会覆盖这个伪模块的作用,不会影响最终的构建结果。
额外提醒
- 记得把方法二中的伪文件添加到
.gitignore(如果用Git的话),避免误提交到代码仓库 - 两种方法里的
<你的包名>都要替换成你项目*.cabal文件里的包名称
内容的提问来源于stack exchange,提问作者plc
相关产品推荐
相关产品推荐

