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

使用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目录

这是最优雅的方案,不需要手动创建伪文件:

  1. 在项目根目录下创建或编辑cabal.project.local文件(这个文件是Cabal的本地配置,不会被版本控制追踪)
  2. 添加以下内容,把<你的包名>替换成你实际的包名称:
    package <你的包名>
      ghc-options: -idist/build/autogen
    
  3. 保存文件后,重启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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:13:50