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

Stack throwing errors whenever I try to install something

每当我尝试使用 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\""

这是我第一次尝试使用 stack 安装任何东西,所以我不确定该怎么做。在这样做之前我做了 运行 $ stack upgrade

Stack 版本为 1.5.1 x86_64,位于目录 usr/bin/stack.

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

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

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

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

大多数人已经在他们的路径中有了这些目录,所以他们在安装后 运行ning stack 没有任何问题,无论哪种情况。

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

因为很多人 没有 在他们的路径中有 ~/.local/bin/,他们可能会发现尝试 运行 Stack 在据说升级后仍然 运行旧版本。如果你 运行:

$ which stack
/usr/local/bin/stack

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

如果你尝试运行宁:

$ ~/.local/bin/stack install hip

如果可行,那么这将确认这是您的问题。在 到 select 正确版本 stack 的全局路径之前,您必须将 $HOME/.local/bin 添加到您的路径 。 (如果您以前没有做过此类事情,请搜索 "adding directory path" 和您的 Linux 发行版。例如,这里有一些 instructions for Ubuntu 在 Ask Ubuntu StackExchange 站点.)