首页 > 解决方案 > 使用 Stack 构建逆变器会导致无法推断逆变器的约束错误

问题描述

在构建我的项目时,我收到如下错误:

   /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

添加contravariantdependenciesin package.yaml,然后导入Data.Functor.Contravariant.Divisiblein Lib.hs。这导致运行时出现编译错误stack build

标签: haskellhaskell-stack

解决方案


不是你——发布的软件包还没有赶上 base-4.12。

现在Contravariant类在 中base,for 的实例Backwards应该移动到transformers定义后者的位置。有一个添加实例的补丁,但我认为它没有发布到 Hackage。

在你的鞋子里,我会:

  1. 在本地查看 darcs 存储库
  2. 将本地结帐添加为extra-dep
  3. 错误维护者发布transformers

推荐阅读