Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell Acid状态示例编译错误。没有(Control.Monad.Reader.Class.monawarder FailureDb(Query FailureDb))的实例_Haskell_Nix_Nixos - Fatal编程技术网

Haskell Acid状态示例编译错误。没有(Control.Monad.Reader.Class.monawarder FailureDb(Query FailureDb))的实例

Haskell Acid状态示例编译错误。没有(Control.Monad.Reader.Class.monawarder FailureDb(Query FailureDb))的实例,haskell,nix,nixos,Haskell,Nix,Nixos,我尝试了acid,但编译错误 表示没有实例MonadState没有实例MonadReader没有实例 说这是因为安装了两个不同的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 | g

我尝试了acid,但编译错误

表示没有实例MonadState没有实例MonadReader没有实例

说这是因为安装了两个不同的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中的acid state的stack.yaml是lts-11.15,它有mtl-2.2.2


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

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

堆栈

当我使用堆栈时,我不在NIX shell中运行它,这样NIX shell就不能将包添加到包装的GHC命令中,堆栈将被认为是系统包(Cabar术语中的“全局”)。但我不确定这是否是唯一有效的方法

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

好的,我
GHC pkg取消注册——强制mtl-2.2.2
,示例有效!但是我还没有解开为什么nix shell使用mtl-2.2.1而不是2.2.2安装acid state的谜团。感谢您指出存在不同的现有软件包。堆叠方式适合我。