Не удалось найти модуль `Control.Monad.State` после обновления mtl - PullRequest
0 голосов
/ 14 мая 2018

Я хотел использовать модуль Control.Monad.Except, но оказалось, что у меня был устаревший пакет mtl (это вызвало ошибку импорта - у меня был устаревший модуль Control.Monad.Error).Итак, я сделал

sudo cabal install mtl

И он установил версию 2.2.2.Однако теперь у меня были установлены две версии, 2.1.2 и 2.2.2, которые все еще вызывали ошибку импорта.Я следовал инструкциям здесь и сделал

sudo ghc-pkg unregister --force mtl-2.1.2

, чтобы удалить старую версию.Но теперь я получаю сообщение об ошибке:

Could not find module `Control.Monad.State'
It is a member of the hidden package `monads-tf-0.1.0.2'.
Use -v to see a list of the files searched for.

ghc-pkg check вывод

There are problems in package HTTP-4000.2.17:
  dependency "mtl-2.1.2-735d9c92b4f214d454fb5168bb1eb6ee" doesn't exist
There are problems in package fgl-5.5.0.1:
  dependency "mtl-2.1.2-735d9c92b4f214d454fb5168bb1eb6ee" doesn't exist
There are problems in package cgi-3001.1.8.5:
  dependency "mtl-2.1.2-735d9c92b4f214d454fb5168bb1eb6ee" doesn't exist
There are problems in package parsec-3.1.3:
  dependency "mtl-2.1.2-735d9c92b4f214d454fb5168bb1eb6ee" doesn't exist
There are problems in package regex-base-0.93.2:
  dependency "mtl-2.1.2-735d9c92b4f214d454fb5168bb1eb6ee" doesn't exist

The following packages are broken, either because they have a problem
listed above, or because they depend on a broken package.
HTTP-4000.2.17
fgl-5.5.0.1
cgi-3001.1.8.5
parsec-3.1.3
regex-base-0.93.2
network-2.4.1.2
regex-compat-0.95.1
regex-posix-0.95.2

Что мне теперь делать?

1 Ответ

0 голосов
/ 14 мая 2018

Вам необходимо переустановить все пакеты, которые зависят от mtl, чтобы получить их новую версию. Cabal-install сможет сделать это автоматически, если в папке вашего проекта с файлом yourproject.cabal вы сделаете

$ cabal install --dependencies-only

Как отмечает Даниэль, может также понадобиться добавить --reinstall, а именно, если Cabal-install должным образом не прижился к изменениям зависимостей и должен быть помечен вручную для их восстановления. Если он считает, что сами переустановки могут сломать другие пакеты, --force-reinstalls также может понадобиться.

Альтернативой, позволяющей избежать ада зависимости, является использование новых команд в стиле Nix , которые никогда не ломаются при переустановке.

...