3

我目前正在尝试使用 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 中,我可以直接作为可执行文件运行alexhappy因为它们是由 nix 提供的。

问题:有谁知道我可以尝试解决这个问题吗?我想尝试完全使用 nix 提供依赖项,而不是使用cabal update从 Hackage 下载包。


可以在unhappy此处的分支中找到源代码,其中包含感兴趣的文件:


到目前为止我尝试过的一些事情是:

  • 我在这里发现了一个类似的错误,但它没有完全解决,并且那里的 nix 构建使用了 haskell.nix

  • 在进行故障排除时,我尝试了以下其他构建方法:

    1. 使用通过ghcup安装的 cabal/ghc构建(cabal 3.2.0.0,ghc 8.10.2):构建成功 - 从 Hackage 获取 alex 和 happy 并以build-tools.

    2. 使用nix-build 构建:构建成功运行(没有将包提取到 .cabal)。callCabal2nix认出了亚历克斯和快乐,并成功地将他们提供给阴谋集团。

    3. 在nix-shell中构建cabal update: 与 1. 相同,并且它成功,因为 nix 提供的 cabal 从 Hackage 获取包,但这不是我想要完成的。

  • 我还尝试使用 nix-shell 构建一个最小的示例 alex/happy 项目,使用我自己项目中相同的通用 *.nix 文件,并产生相同的错误。

4

1 回答 1

1

Cabal 根本不相信它alex是由 Nixpkgs 的自定义 Haskell 环境(.env您正确用于 shell 的包上的属性)安装的。

如果你运行cabal update,cabal-install 将能够按照它想要的方式安装alexhappy继续构建你的项目。

$ cabal v2-build
[... omitted ...]
[__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

$ cabal update
Downloading the latest package list from hackage.haskell.org

$ cabal v2-build
Resolving dependencies...
Build profile: -w ghc-8.10.2 -O1
In order, the following will be built (use -v for more details):
 - alex-3.2.6 (exe:alex) (requires download & build)
 - happy-1.20.0 (exe:happy) (requires download & build)
 - aoc-0.1.0.0 (lib) (configuration changed)
 - aoc-0.1.0.0 (exe:aoc) (dependency rebuilt)
Downloading  happy-1.20.0
[... omitted ...]
Configuring library for aoc-0.1.0.0..
Preprocessing library for aoc-0.1.0.0..
Building library for aoc-0.1.0.0..
[... omitted ...]


根据阴谋集团的build-tools文件,该字段已被弃用并删除。看起来你会更好build-tool-depends

    build-tool-depends:
      alex:alex >=3.2.5 && <3.3
    , happy:happy >=1.20.0 && <1.21
于 2020-12-14T10:15:53.607 回答