我正在尝试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使用的是与Control.Monad.Reader不同的mtl版本。
但是github中的acid-state的stack.yaml是lts-11.15,其mtl-2.2.2。
那么我应该怎么做才能让它工作呢?
发布于 2018-08-31 16:48:33
在处理GHC的dbs包时,Stack和Cabal-install也有类似的问题,但这些问题是可以避免的:
堆栈
当我使用Stack时,我不会在nix-shell中运行它,所以nix-shell不能将包添加到封装的GHC命令中,然后Stack会认为它是系统包(在Cabal术语中是‘global’)。不过,我不确定这是否是唯一有效的方法。
Cabal-仅安装
在nix-shell中调用Cabal时,您应该添加这些标志,以防止GHC查看错误的包db:cabal configure --package-db=clear --package-db=global。GHC包装器将使Nix管理的依赖项出现在'global‘包db中。
https://stackoverflow.com/questions/52108291
复制相似问题