【问题标题】:Can older Cabal or Haskell projects be run on newer versions of Cabal and Haskell?较旧的 Cabal 或 Haskell 项目可以在较新版本的 Cabal 和 Haskell 上运行吗?
【发布时间】:2021-03-30 10:59:09
【问题描述】:

我正在尝试构建我的项目,但遇到了一个非常奇怪的问题。我让我的朋友用 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 和我操作系统。

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

【问题讨论】:

  • 我怀疑它是阴谋集团,但不同的 GHC 版本通常是一个问题 - 我会推荐像 GHCUP 这样的东西来按需切换版本(或堆栈) - 这只是一种预感,但如果你删除它会消失val@(HInteger_ ) 之间的空格?
  • 也许这也能帮到你:stackoverflow.com/questions/7770100/…
  • 谢谢!我会看看 GHCUP 和链接!希望这就是它的全部内容
  • 也请尝试val@(HInteger _) - 这只是一个疯狂的猜测,但也许他们在那里更改了语法,以便 as-patterns 没有空格,并且空格表示类型应用程序(如错误提示) - 我有点兴奋它说(不支持尚未),因为我可以看到一些用例 - 但这是另一回事
  • 您不会相信...将其更改为val@(HInteger _) 确实有效。必须做的另一件事是安装 System.Random,然后它就可以工作了……非常感谢

标签: haskell cabal


【解决方案1】:

事实证明这是 GHC 9.0 中的一个变化:Whitespace-sensitive !, ~, @, and $

这是第二点:

f@x = y

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

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

f@x = x

所以如果你把它改成

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

它应该适用于两个编译器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    相关资源
    最近更新 更多