haskell - 是否可以追踪导致特定标识符的进口链?

标签 haskell ghc

Haskell 包(我们称它为包A)由于更新的依赖项已停止为我编译,并出现有关 undefined variable 的错误。我可以访问一个旧的依赖环境,其中完全相同的代码确实仍然可以编译,所以我可以在 GHCi 中打开模块并使用 :info 来追踪它最初的位置来自,这让我找到包B

问题是 A 中现在损坏的模块没有直接B 中导入定义这个缺失标识符的模块;它一定是通过另一个重新导出它的导入来获取它的。但是 AB 在两种环境之间根本没有变化。所以这意味着某个第三C 中的模块必须之前从 B 导入并重新导出我的标识符,然后再导入(可能通过进一步的重新导出)由 AC 中的损坏模块在两个环境之间发生变化,不再重新导出标识符。

有什么方法可以在工作环境中向 GHC 或 Cabal 询问导致标识符在范围内的完整导入链,以便我可以识别包 C?否则我不知道如何在不手动检查 A 的所有(传递)依赖项的情况下缩小问题的原因,这些依赖项可能有理由从 B 导入某些东西。

最佳答案

我不知道如何请求整个链,但你可以使用 -ddump-minimal-imports 请求链中的第一步,然后迭代。

关于haskell - 是否可以追踪导致特定标识符的进口链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58194161/

相关文章:

Haskell Map 其中键的类型决定了值的类型

haskell - 使用 cabal 和 ghc 构建运行时标志

haskell - 名义类型角色和数据系列

haskell - 哪些语言扩展可以写入 "class A (B c) => D c where ..."?这个类型类声明的含义是什么?

haskell : unload module in WinGHCi

haskell - 将列表中的项目替换为另一个列表中具有匹配构造函数的项目

haskell - 什么是 Levity 多态性

haskell - 将字符串视为 Haskell 程序

Haskell、Monads、堆栈空间、惰性——如何构造惰性代码?

将 Haskell 程序编译为 C