"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 3

1 ответ:

Проблема, которую вы описываете, возникает потому, что:

  1. Cabal 2.2.0.0, в отличие от предыдущих версий, имеет parsec в качестве зависимости. Чтобы объяснить это, parsec является одним из основных пакетов, связанных с GHC начиная с GHC 8.4.1 и далее .

  2. 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 могут привести к несовместимости с наборами пакетов, но это может быть полезно, если вы пытаетесь протестировать конкретный багфикс.