如何将我的包裹标记为特别依赖于 ghc?

How do I mark my package as depending on ghc specifically?

我的包依赖于 GHC 中的一些实现细节(不仅仅是语言扩展)。我应该如何在我的 .cabal 文件中表达这种依赖关系?我是不是该?我只是偏执吗?

build-depends

我认为也许我应该将 ghc 添加到 build-depends 列表中,但是没有 ghc package

受到ghc-mod's dependency list的启发,我还是试了一下。我添加了 build-depends: ghc >= 7.20,这在我只安装了 7.10.3 时产生了预期的失败。 (在撰写本文时,7.20 甚至不存在。)

cabal.exe: At least the following dependencies are missing:
ghc >=7.20

ghc 是某种神奇的包裹吗?还有哪些魔法包?

tested-with

tested-with package property。但是,这似乎并不影响构建。我添加了 tested-with: GHC==7.20(一个不存在但比我拥有的 7.10.3 更新的 GHC 版本),但是 cabal build 仍然构建了我的包并且甚至没有发出警告或任何东西。

ghc 一个包,而不是一个魔法包。它只是不是 Hackage 上的一个包。相反,它与您的 ghc 安装一起安装,默认情况下是隐藏的。您可以在 ghc-pkg list 的输出中看到它。它为编译器公开了一个 API 。如果您实际上不使用它,则不应依赖它。一般来说,大多数人 不会 将自己固定在 GHC 上,除非他们确实需要。例如,您 确定 您的包不会用 GHCjsHaste 编译吗?那么,为什么要提前限制自己...

如果你可以在没有 ghc 实现细节的情况下使用你的包,但也可以用 "longhand" 更昂贵的方式做事,你可以使用 cabal 提供的宏在你的根据 GHC 测试给出不同结果的代码。

tested-with 确实是约定俗成的纯信息字段。