Ошибка скомпилированного примера состояния кислоты. Нет Нет экземпляра для (Control.Monad.Reader.Class.MonadReader FailureDb (Query FailureDb)) - PullRequest
0 голосов
/ 31 августа 2018

Я пробовал кислоту пример , но ошибка компиляции.

Сообщение об ошибке говорит no instance No instance for MonadState, No instance for MonadReader.

В этой статье говорится, что это связано с двумя установленными версиями MTL.

И я использую nix-shell в nixos:

ghc-pkg list | grep acid
    acid-state-0.14.3

ghc-pkg list | grep mtl
    mtl-2.2.1
    mtl-2.2.2

Однако, если я не использую пакет acid-state при входе в nix-shell, я получаю:

ghc-pkg list | grep mtl
    mtl-2.2.2

Это, вероятно, означает, что acid-state использует версию mtl, отличную от Control.Monad.Reader.

Но в github stack.yaml из кислого состояния имеет вид lts-11.15, в котором есть mtl-2.2.2.

Так, что я должен сделать, чтобы это работало?

1 Ответ

0 голосов
/ 31 августа 2018

Stack и Cabal-install имеют похожие проблемы при работе с пакетными базами данных GHC, но этих проблем можно избежать:

Stack

Когда я использую Stack, я не запускаю его в nix-оболочке, поэтому nix-shell не может добавлять пакеты в упакованную команду GHC, которую Stack затем будет считать системными пакетами («глобальными» в Кабальная терминология). Я не уверен, является ли это единственно верным подходом.

Cabal-install only

При вызове Cabal в nix-оболочке вы должны добавить эти флаги, чтобы GHC не смотрел неправильный пакет db: cabal configure --package-db=clear --package-db=global. Оболочка GHC заставит управляемые Nix зависимости появляться в «глобальном» пакете db.

...