“stack setup --upgrade-cabal”失败,找不到Text.Parsec

时间:2018-03-18 12:18:58

标签: haskell cabal haskell-stack

使用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

如何解决此错误并使用Stack升级Cabal?

1 个答案:

答案 0 :(得分:3)

您描述的问题是因为:

  1. Cabal 2.2.0.0与早期版本不同,它将 parsec 作为依赖项。为此,parsec is one of the core packages bundled with GHC from GHC 8.4.1 onwards

  2. stack setup --upgrade-cabal在" global"安装 Cabal level,这是交叉快照但与GHC版本相关联。因此,它只使用与GHC捆绑在一起的软件包(而不是任何快照中的软件包)。请参阅Stack issue #3049以及其中相关的其他问题,以便对此进行讨论。

  3. 既然如此,我认为除非您愿意将项目更改为使用GHC 8.4.1的解析器/快照,否则无法解决此问题。

    P.S。:除非您需要2.2.0.0中包含的特定 Cabal 功能或错误修复,否则您可能需要重新考虑是否确实要升级 Cabal 。引用Stack user guide

      

    stack setup --upgrade-cabal可以安装较新版本的Cabal库,用于执行实际构建。您通常不应该这样做,因为新的Cabal版本可能会导致与软件包集不兼容,但如果您尝试测试特定的错误修复程序,它会很有用。