haskell - Acid-State 示例编译错误。否 (Control.Monad.Reader.Class.MonadReader FailureDb (Query FailureDb)) 没有实例
问题描述
我正在尝试酸示例,但编译错误。
错误消息说no instance No instance for MonadState, No instance for 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 时不使用酸状态包,我会得到:
ghc-pkg list | grep mtl
mtl-2.2.2
这可能意味着酸状态使用的 mtl 版本与 Control.Monad.Reader 不同。
但是acid-state在github中的stack.yaml是lts-11.15,里面有mtl-2.2.2。
那么我应该怎么做才能让它工作呢?
解决方案
Stack 和 Cabal-install 在处理 GHC 的包 dbs 时有类似的问题,但是这些问题是可以避免的:
堆
当我使用 Stack 时,我不在 nix-shell 中运行它,因此 nix-shell 无法将包添加到包装的 GHC 命令中,然后 Stack 将其视为系统包(Cabal 术语中的“全局”) . 我不确定这是否是唯一有效的方法。
仅 Cabal 安装
在 nix-shell 中调用 Cabal 时,您应该添加这些标志以防止 GHC 查看错误的包 db: cabal configure --package-db=clear --package-db=global
。GHC 包装器将使 Nix 管理的依赖项出现在“全局”包 db 中。
推荐阅读
- r - foreach 和 doparallel 在 R 中运行没有问题,但没有得到任何正确的结果
- vue.js - 带有隐藏组件的 VueJs v-Model 绑定不起作用
- apache-camel - 在jboss中配置camel jmx时出现异常
- csv - SAS - 在 proc 导入的 CSV 中更改列的格式
- laravel - 我需要向 laradock api 发出发布请求。在邮递员作品上发帖,但在卷曲中不要
- ms-word - 如何调试 Word 加载项的 ExecuteFunctions?
- java - 如果 InputMismatchException 一直循环怎么办?
- azure - 使用数据工厂从 Blob 存储作为源进行复制活动时出错
- python - 如何将 uint32_t 转换为无符号字符数组?
- python - 熊猫数据框操作以摆脱周期