旧的Cabal或Haskell项目可以在Cabal和Haskell的新版本上运行吗?

旧的Cabal或Haskell项目可以在Cabal和Haskell的新版本上运行吗?,haskell,cabal,Haskell,Cabal,我正试图建立我的项目,我遇到了一个非常奇怪的问题。我让我的朋友用巧克力安装Haskell,当他用cabal build和cabal run project编译我的项目时,他遇到了我没有的以下错误: Expr.hs:103:1: error: Type applications in patterns are not yet supported | 103 | evalVal env val @(HInteger _) = return $ val | ^^^^^

我正试图建立我的项目,我遇到了一个非常奇怪的问题。我让我的朋友用巧克力安装Haskell,当他用
cabal build
cabal run project
编译我的项目时,他遇到了我没有的以下错误:

Expr.hs:103:1: error:
    Type applications in patterns are not yet supported
    |
103 | evalVal env val @(HInteger _)      = return $ val
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我假设阴谋集团的文件会处理依赖关系,但显然不是。粗略的搜索也证明是徒劳的,因为我甚至找不到另一个有同样错误的人

我不确定问题是否是由于他使用的是
ghc 9.0.1
cabal 3.4
,而我使用的是
ghc 8.8.3
cabal 3.2
,或者是由于不同的操作系统,他使用的是Windows和iOSX


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

这是第二点:

f@x=y

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

要恢复旧行为,请删除@周围的前导和尾随空格,如下所示:

f@x=x

所以如果你把它改成

evalVal env val@(HInteger _)      = return $ val

它应该适用于这两种编译器

事实证明,这是GHC 9.0中的一个变化:

这是第二点:

f@x=y

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

要恢复旧行为,请删除@周围的前导和尾随空格,如下所示:

f@x=x

所以如果你把它改成

evalVal env val@(HInteger _)      = return $ val

它应该适用于两种编译器

我怀疑这是阴谋,但不同的GHC版本通常是一个问题-我建议像GHCUP这样的东西按需切换版本(或堆栈)-这只是一种预感,但如果你去掉
val
之间的空格,它会消失吗(HInteger)
?也许这也能帮到你:谢谢!我来看看GHCUP和链接!希望这就是它的全部内容请尝试
val@(HInteger)
-这只是一个猜测,但可能他们更改了那里的语法,因此模式没有空格,空格表示类型应用程序(正如错误提示的那样)-我对它的说法感到有点兴奋(还不支持)正如我看到的一些用例所示——但这是另一件事,你不会相信……将其更改为
val@(HInteger)
实际上起到了作用。另一件必须做的事情是安装系统。随机,然后它就工作了…谢谢你,所以我怀疑这是阴谋集团,但不同的GHC版本通常是一个问题-我建议像GHCUP这样的东西根据需要切换版本(或堆栈)-这只是一种预感,但如果您删除
val
@(hintger)
之间的空格,它会消失吗?也许这也能帮您解决问题:谢谢!我来看看GHCUP和链接!希望这就是它的全部内容请尝试
val@(HInteger)
-这只是一个猜测,但可能他们更改了那里的语法,因此模式没有空格,空格表示类型应用程序(正如错误提示的那样)-我对它的说法感到有点兴奋(还不支持)正如我看到的一些用例所示——但这是另一件事,你不会相信……将其更改为
val@(HInteger)
实际上起到了作用。另一件必须做的事情是安装系统。随机,然后它就工作了…非常感谢