较旧的 Cabal 或 Haskell 项目能否在较新版本的 Cabal 和 Haskell 上运行?

问题描述

我正在尝试构建我的项目,但遇到了一个非常奇怪的问题。我让我的朋友用 Chocolatey 安装 Haskell,当他用 cabal buildcabal run project 编译我的项目时,他遇到了我没有的以下错误

Expr.hs:103:1: error:
    Type applications in patterns are not yet supported
    |
103 | evalVal env val @(HInteger _)      = return $ val
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我认为 cabal 文件会处理依赖关系,但显然不会。粗略的搜索也证明是徒劳的,因为我什至找不到其他人有同样错误的例子。

我不确定问题是由于他在 ghc 9.0.1cabal 3.4 而我在 ghc 8.8.3cabal 3.2 还是由于不同操作系统,他是 Windows 和 I OSX。

我担心的是,如果我升级我的 ghc 和 cabal 版本,那么我会遇到这个错误,我将不得不重新安装所有第一次变得混乱和困难的东西

解决方法

事实证明这是 GHC 9.0 中的更改:Whitespace-sensitive !,~,@,and $

这是第二点:

f@x = y

Before:使用 as-pattern 将 f 和 x 都绑定到 y 的值绑定 之后:名为 (@) 的中缀函数

要恢复旧行为,请删除@ 前后的空格,如下所示:

f@x = x

所以如果你把它改成

let array2 = ['key1 value','key2 value']

它应该适用于两个编译器