酸状态示例编译错误。否(Control.Monad.Reader.Class.MonadReader FailureDb(Query FailureDb))没有实例

时间:2018-08-31 04:05:35

标签: haskell nix nixos

我尝试使用example,但编译错误。

The error messageno 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时不使用酸性状态包装,则会得到:

ghc-pkg list | grep mtl
    mtl-2.2.2

这可能意味着酸性状态使用的是与Control.Monad.Reader不同的mtl版本。

但是github中的acid-state的stack.yaml是lts-11.15,具有mtl-2.2.2。

那我应该怎么做才能使它工作呢?

1 个答案:

答案 0 :(得分:1)

Stack和Cabal-install在处理GHC的软件包dbs时有类似的问题,但是可以避免这些问题:

堆栈

当我使用Stack时,我不会在nix-shell中运行它,因此nix-shell不能将软件包添加到已包装的GHC命令中,Stack会将其视为系统软件包(在阴谋术语)。我不确定这是否是唯一有效的方法。

仅Cabal安装

在nix-shell中调用Cabal时,应添加以下标志,以防止GHC查找错误的软件包db:cabal configure --package-db=clear --package-db=global。 GHC包装器将使Nix管理的依赖项出现在“全局”包db中。