我目前正在尝试使用 nix-shell 和 cabal 构建一个 Haskell 项目,并使用 alex 和 happy 作为构建工具。在nix-shell内部构建(有和没有--pure
),我收到以下奇怪的错误消息:
cabal: Could not resolve dependencies:
[__0] trying: aoc-0.1.0.0 (user goal)
[__1] unknown package: aoc:happy:exe.happy (dependency of aoc)
[__1] fail (backjumping, conflict set: aoc, aoc:happy:exe.happy)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: aoc, aoc:happy:exe.happy
aoc:happy:exe.happy
尽管在 cabal 文件中没有提到这样的事情,但它似乎试图满足一些无意义的依赖。在 nix-shell 中,我可以直接作为可执行文件运行alex
,happy
因为它们是由 nix 提供的。
问题:有谁知道我可以尝试解决这个问题吗?我想尝试完全使用 nix 提供依赖项,而不是使用cabal update
从 Hackage 下载包。
可以在unhappy
此处的分支中找到源代码,其中包含感兴趣的文件:
- package.yaml(用于 hpack)
- aoc.cabal
- 默认.nix
到目前为止我尝试过的一些事情是:
我在这里发现了一个类似的错误,但它没有完全解决,并且那里的 nix 构建使用了 haskell.nix。
在进行故障排除时,我尝试了以下其他构建方法:
使用通过ghcup安装的 cabal/ghc构建(cabal 3.2.0.0,ghc 8.10.2):构建成功 - 从 Hackage 获取 alex 和 happy 并以
build-tools
.使用nix-build 构建:构建成功运行(没有将包提取到 .cabal)。
callCabal2nix
认出了亚历克斯和快乐,并成功地将他们提供给阴谋集团。在nix-shell中构建
cabal update
: 与 1. 相同,并且它成功,因为 nix 提供的 cabal 从 Hackage 获取包,但这不是我想要完成的。
我还尝试使用 nix-shell 构建一个最小的示例 alex/happy 项目,使用我自己项目中相同的通用 *.nix 文件,并产生相同的错误。