Acid-State 示例编译错误。没有实例 (Control.Monad.Reader.Class.MonadReader FailureDb (Query FailureDb))
Acid-State example compiled error. No No instance for (Control.Monad.Reader.Class.MonadReader FailureDb (Query FailureDb))
我正在尝试 acid example 但编译错误。
The error message 表示 no instance No instance for MonadState, No instance for MonadReader
。
This article 说这是因为安装了两个不同的 mtl 版本。
我在 nixos 中使用 nix-shell:
ghc-pkg list | grep acid
acid-state-0.14.3
ghc-pkg list | grep mtl
mtl-2.2.1
mtl-2.2.2
但是,如果我在进入nix-shell时不使用acid-state包,我得到:
ghc-pkg list | grep mtl
mtl-2.2.2
这可能意味着 acid-state 使用的 mtl 版本不同于 Control.Monad.Reader。
但是github中酸态的stack.yaml是lts-11.15,它有mtl-2.2.2.
那么我应该怎么做才能让它发挥作用?
Stack和Cabal-install在处理GHC的package dbs时也有类似的问题,但是这些问题是可以避免的:
堆栈
当我使用 Stack 时,我不会在 nix-shell 中 运行 它,因此 nix-shell 无法将包添加到包装的 GHC 命令然后 Stack 将认为是系统包(Cabal 术语中的 'global')。我不确定这是否是唯一有效的方法。
仅限 Cabal 安装
在 nix-shell 中调用 Cabal 时,您应该添加这些标志以防止 GHC 查看错误的包数据库:cabal configure --package-db=clear --package-db=global
。 GHC 包装器将使 Nix 管理的依赖项出现在 'global' 包数据库中。
我正在尝试 acid example 但编译错误。
The error message 表示 no instance No instance for MonadState, No instance for MonadReader
。
This article 说这是因为安装了两个不同的 mtl 版本。
我在 nixos 中使用 nix-shell:
ghc-pkg list | grep acid
acid-state-0.14.3
ghc-pkg list | grep mtl
mtl-2.2.1
mtl-2.2.2
但是,如果我在进入nix-shell时不使用acid-state包,我得到:
ghc-pkg list | grep mtl
mtl-2.2.2
这可能意味着 acid-state 使用的 mtl 版本不同于 Control.Monad.Reader。
但是github中酸态的stack.yaml是lts-11.15,它有mtl-2.2.2.
那么我应该怎么做才能让它发挥作用?
Stack和Cabal-install在处理GHC的package dbs时也有类似的问题,但是这些问题是可以避免的:
堆栈
当我使用 Stack 时,我不会在 nix-shell 中 运行 它,因此 nix-shell 无法将包添加到包装的 GHC 命令然后 Stack 将认为是系统包(Cabal 术语中的 'global')。我不确定这是否是唯一有效的方法。
仅限 Cabal 安装
在 nix-shell 中调用 Cabal 时,您应该添加这些标志以防止 GHC 查看错误的包数据库:cabal configure --package-db=clear --package-db=global
。 GHC 包装器将使 Nix 管理的依赖项出现在 'global' 包数据库中。