每当我尝试安装某些东西时都会抛出堆栈错误

Ebe*_*ley 1 haskell haskell-stack

每当我尝试使用 、 和其他几个软件包安装某些东西时stack$ stack install hip它们$ stack install Gifcurry都会抛出相同的错误:

Downloaded lts-12.9 build plan.
AesonException "Error in $.packages.cassava.constraints.flags['bytestring--lt-0_10_4']: Invalid flag name: \"bytestring--lt-0_10_4\""
Run Code Online (Sandbox Code Playgroud)

这是我第一次尝试使用stack安装任何东西,所以我不知道该怎么做。在做这件事之前我确实跑步了$ stack upgrade

堆栈版本是1.5.1 x86_64,它位于目录中usr/bin/stack

K. *_*uhr 5

我认为这是一个常见问题,但要找到直接解决该问题的 StackOverflow 答案有点困难,所以这里有一个解决方案。

在 Linux 上,初始安装 Stack 有两种主要方法:

  1. 如果您的发行版有一个“stack”包,您可以安装它。这通常会将stack二进制文件放入/usr/bin/stack.

  2. 如果您按照 上的说明进行操作haskellstack.org,它会告诉您通过 shell 检索安装脚本curl并通过管道传输它: curl -sSL https://get.haskellstack.org/ | sh。默认情况下,这会stack放入/usr/local/bin/stack.

stack大多数人的路径中已经有这些目录,因此无论哪种情况,安装后运行都不会出现任何问题。

但是,如果您稍后按照使用该命令升级 Stack 的说明进行操作stack upgrade,这会将升级后的二进制文件安装在您的主目录下的~/.local/bin/stack. 旧版本在/usr/bin/stack/usr/local/bin/stack将保持不变。

由于许多人没有这样~/.local/bin/,他们可能会发现在升级后尝试运行 Stack 仍然会运行旧版本。如果你运行:

$ which stack
/usr/local/bin/stack
Run Code Online (Sandbox Code Playgroud)

并查看路径是全局安装的版本,而不是主目录下的路径,例如/home/xxx/.local/bin/stack,那么您可能仍在运行旧版本。

如果您尝试运行:

$ ~/.local/bin/stack install hip
Run Code Online (Sandbox Code Playgroud)

那行得通,那么这将确认这是你的问题。您必须在全局路径之前$HOME/.local/bin添加到您的路径中,才能选择正确的. (如果您以前没有做过此类操作,请搜索“添加目录路径”和您的 Linux 发行版。例如,以下是Ask Ubuntu StackExchange 网站上针对 Ubuntu 的一些说明。)stack