我尝试使用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时不使用酸性状态包装,则会得到:
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。
那我应该怎么做才能使它工作呢?
答案 0 :(得分:1)
Stack和Cabal-install在处理GHC的软件包dbs时有类似的问题,但是可以避免这些问题:
当我使用Stack时,我不会在nix-shell中运行它,因此nix-shell不能将软件包添加到已包装的GHC命令中,Stack会将其视为系统软件包(在阴谋术语)。我不确定这是否是唯一有效的方法。
在nix-shell中调用Cabal时,应添加以下标志,以防止GHC查找错误的软件包db:cabal configure --package-db=clear --package-db=global
。 GHC包装器将使Nix管理的依赖项出现在“全局”包db中。