每当我尝试使用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
目录中。
我认为这是一个常见问题,但是找到直接解决它的StackOverflow答案有点困难,所以这里有一个镜头。
在Linux上,最初安装Stack有两种主要方式:
stack
二进制文件放在/usr/bin/stack
中。haskellstack.org
上的说明操作,它会告诉您通过curl
检索安装脚本并通过shell管道:curl -sSL https://get.haskellstack.org/ | sh
。默认情况下,这会将stack
放入/usr/local/bin/stack
。大多数人已经在他们的路径中有这些目录,所以在安装之后运行stack
没有任何问题,无论是哪种情况。
但是,如果您稍后按照使用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
这是有效的,然后这将确认这是你的问题。您必须在全局路径之前将$HOME/.local/bin
添加到路径中以选择正确版本的stack
。 (如果您之前没有这样做过,请搜索“添加目录路径”和Linux发行版。例如,这里有一些Ask Ubuntu StackExchange站点上的instructions for Ubuntu。)