如何处理Haskell软件包';配置的依赖项范围是否已过期?

如何处理Haskell软件包';配置的依赖项范围是否已过期?,haskell,haskell-stack,happstack,Haskell,Haskell Stack,Happstack,尝试通过安装happstack时 $ stack install happstack 我得到以下错误: Run from outside a project, using implicit global project config Using resolver: lts-7.2 from implicit global project's config file: /Users/matthewherzl/.stack/global-project/stack.yaml While

尝试通过安装happstack时

$ stack install happstack
我得到以下错误:

    Run from outside a project, using implicit global project config
Using resolver: lts-7.2 from implicit global project's config file: /Users/matthewherzl/.stack/global-project/stack.yaml

While constructing the build plan, the following exceptions were encountered:

In the dependencies for happstack-7.0.2:
    happstack-server-7.4.6.2 must match >=7.0 && <7.4 (latest applicable is 7.3.9)

Plan construction failed.
使用隐式全局项目配置从项目外部运行
使用隐式全局项目配置文件中的解析器:lts-7.2:/Users/matthewherzl/.stack/global project/stack.yaml
构建构建计划时,遇到以下异常:
在happstack-7.0.2的依赖项中:
happstack-server-7.4.6.2必须匹配>=7.0&&我首先假设您知道Hackage和Stackage之间的区别。如果不是这样,请让我知道,以便我可以在回答中解释

如果转到全局配置正在使用的解析程序/快照,您将看到包happstack不在该快照的包中。然后,如果您检查,您将看到一条注释,指出它“不推荐使用happstack服务器”。既然如此,您所要做的就是安装happstack服务器,而不是happstack。(针对此类情况的一般建议是始终检查Hackage和/或Stackage中的文档,因为它可以更清楚地了解正在发生的事情,以及可能导致问题的包版本和依赖关系的额外信息。)



就你想到的三个备选方案说几句话。如果您有一个旧包,它只需要一些小的更改(比如,改变依赖边界——如果更改更大,您最好找一个旧的、兼容的快照)来使用最近的Stackage快照构建,那么方法#1和#3不仅是好主意,而且是Stack明确支持的。(查找
软件包
额外dep
额外dep
选项),您可以配置项目,以便使用不同的版本,而不是堆栈快照中的默认版本,例如Hackage、本地Git存储库或远程Git存储库。如果您需要执行#3来调整某些包,您甚至不需要等待upstream接受您的pull请求——只需在GitHub或其他地方配置Stack以从您的fork中提取依赖项。

Cabal是标准的包管理器,它提供了对包版本的更精确控制,但需要更多的努力。社区中并非每个人都使用堆栈。我知道我不知道。