"stack setup --upgrade-cabal" не удается, не удается найти текст.Парсек
После создания нового проекта с помощью stack new testProject
, я отредактировал testProject.cabal
, чтобы использовать последнюю версию Cabal:
cabal-version: 2.2.0.0
Запуск stack setup --upgrade-cabal
после этого приводит к ошибке:
[ 12 of 216] Compiling Distribution.Compat.Parsing ( Distribution/Compat/Parsing.hs, Distribution/Compat/Parsing.o )
Distribution/Compat/Parsing.hs:61:1: error:
Could not find module ‘Text.Parsec’
Use -v to see a list of the files searched for.
|
61 | import qualified Text.Parsec as Parsec
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Exit code ExitFailure 1 while running ["ghc","Setup.hs"] in /tmp/stack-cabal-upgrade30389/Cabal-2.2.0.0/
Я на Arch Linux 4.15.3, stack --version
дает
Version 1.6.3, Git revision b27e629b8c4ce369e3b8273f04db193b060000db (5454 commits) x86_64 hpack-0.20.0
stack ghc -- --version
:
The Glorious Glasgow Haskell Compilation System, version 8.2.2
Как я могу обойти эту ошибку и обновить Cabal с помощью стека?
1 ответ:
Проблема, которую вы описываете, возникает потому, что:
Cabal 2.2.0.0, в отличие от предыдущих версий, имеет parsec в качестве зависимости. Чтобы объяснить это, parsec является одним из основных пакетов, связанных с GHC начиная с GHC 8.4.1 и далее .
stack setup --upgrade-cabal
устанавливает Cabal на "глобальном" уровне, который является перекрестным снимком, но привязан к версии GHC. Как следствие, он использует только пакеты в комплекте с GHC (в отличие от пакетов в любом снимок). См. Stack issue #3049 и другие связанные с ним вопросы для обсуждения этого пункта.Таким образом, я считаю, что нет никакого решения этой проблемы, если вы не хотите изменить свой проект на resolver/snapshot, который использует GHC 8.4.1.
П. С.: Если вам нужна конкретная междусобойчик функции или исправление включено в 2.2.0.0, вы, возможно, захотите пересмотреть ли вы на самом деле хотите обновить междусобойчик. Цитирование пользователя стека руководство :
stack setup --upgrade-cabal
можно установить более новую версию библиотеки Cabal, используемую для выполнения реальных сборок. Как правило, этого делать не следует, так как новые версии Cabal могут привести к несовместимости с наборами пакетов, но это может быть полезно, если вы пытаетесь протестировать конкретный багфикс.