使用 Stack 构建逆变会导致关于无法推断逆变的约束错误

Building contravariant using Stack leads to constraint error about not being able to deduce Contravariant

在构建我的项目时,出现如下错误:

   /tmp/stack19408/contravariant-1.5/src/Data/Functor/Contravariant/Divisible.hs:233:10: error:
        • Could not deduce (Contravariant (Backwards f))
            arising from the superclasses of an instance declaration
          from the context: Divisible f
            bound by the instance declaration
            at src/Data/Functor/Contravariant/Divisible.hs:233:10-47
        • In the instance declaration for ‘Divisible (Backwards f)’
        |
    233 | instance Divisible f => Divisible (Backwards f) where
        |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我无法弄清楚这里到底发生了什么,或者错误是在我这边还是涉及的库有问题。我是不是做错了什么?


我已尝试创建可能导致此问题的最小项目。在一个空白的 Stack 项目中,将解析器更改为 ghc-8.6.2 并添加依赖项:

extra-deps:
- contravariant-1.5
- StateVar-1.1.1.1
- base-4.12.0.0
- array-0.5.2.0

contravariant添加到package.yaml中的dependencies,并在Lib.hs中导入Data.Functor.Contravariant.Divisible。当 运行 stack build.

时导致编译错误

不是你 - 已发布的软件包尚未赶上 base-4.12。

现在 Contravariant class 在 base 中,Backwards 的实例应该移动到 transformers,后者被定义。有 a patch that adds the instances,但我认为它没有发布到 Hackage。

站在你的角度,我会:

  1. 在本地检查 darcs 仓库
  2. 将本地结帐添加为 extra-dep
  3. 请维护者发布 transformers