【问题标题】:GHC 7.4 update breaks haskell98?GHC 7.4 更新打破了haskell98?
【发布时间】:2012-03-04 14:28:59
【问题描述】:

我今天更新了 ghc,我的小程序停止工作了:

https://github.com/BrisFunctional/misere-oxo/blob/master/OXO/misere.hs

GHC 现在是 7.4.1-2 版本,据我所知,它现在是默认的 到haskell2010标准,而不是haskell98。 (我可以从 ghc-pkg list 的输出中看到):

haskell2010-1.1.0.1
(haskell98-2.0.0.1)

所以我将“导入列表”更改为“导入 Data.List”,我认为这是唯一的问题,但现在我得到以下信息:

 misere.hs:1:1: Not in scope: `System.Environment.withArgs'

我什至从未导入 System.Environment,这从何而来? 有什么提示吗? 谢谢

编辑: 我更新了 github 上的版本以反映这个错误。并且实际上使用 Data.List ghc 完美地编译了文件,所以它是 runhaskell 产生这个问题..

【问题讨论】:

  • 你试过用ghc -XHaskell98编译吗?
  • 我的 ghc 上不存在该选项,我实际上正在寻找类似的东西..

标签: haskell ghc


【解决方案1】:

您不仅需要将List 更改为Data.List,还需要将Random 更改为System.Random 并从System.Environment 导入getArgs(但目前,代码既不使用getArgs,也不使用任何来自System.Random,所以暂时你也可以移除那些导入)。

旧的非分层模块只能从haskell98 包中访问,该包不再与base 兼容。这意味着使用haskell98 模块还需要在命令行中显式隐藏base,或者不在.cabal 文件的依赖项字段中列出base

我对错误消息有点惊讶,我希望它会说

Could not find module `System'
It is a  member of the hidden package `haskell98-2.0.0.1'.

但这种差异可能是runhaskell 的一个怪癖。

【讨论】:

  • 很抱歉,链接上的版本与我实际使用的版本不同,我在 github 上推送了当前版本,这让我之前显示了错误。
  • 这很奇怪。使用 runhaskell 或直接从 shell 运行新版本时,我没有收到任何错误,并且文件中没有出现该错误的原因。 runhaskell --version 报告什么?除了runghc 7.4.1,我并没有期待什么,但我想确定一下。
  • 是的,我得到的正是那个版本,我刚刚在另一台机器上尝试了以前版本的 GHC,一切正常......也许我会尝试重新安装所有与 haskell 相关的软件包我的 Archlinux 看看是否可行。
  • 似乎是一个极端的措施,但另一方面,奇怪的错误仅出现在(?)一台机器上说明安装不正确。
  • 是的,我也在这台机器上更新了 GHC,它仍然可以完美地运行 runhaskell。所以这个问题可能与之前通过 cabal 安装的包的冲突有关,清理应该可以解决问题..
【解决方案2】:

如果您的程序是纯 Haskell98,您可以使用以下 GHC 调用:

ghc -package haskell98 -hide-package base

不过,从长远来看,至少升级到分层模块名称会更好。使用Hoogle 找出模块的名称。例如,http://www.haskell.org/hoogle/?hoogle=withArgsSystem.Environment 列为导出模块。

【讨论】:

    【解决方案3】:

    首先,我认为您确实使用 System.Environment.withArgs,因为 getArgs 使用 withArgs。 Hackage.Haskell page for System.Environment

    尝试导入withArgs,也可以导入整个System.Environment

    其次,List 过去可能比 Data.List 现在拥有更多。您可能想尝试包含整个 Prelude 而不仅仅是 Data.List

    为了回答标题中的问题,GHC 的每次更新都扩展了 Haskell98。一些语言编译指示甚至破坏了一些 Haskell98 的细节。但大多数库中的更改会导致问题,而不是 GHC 更新本身。

    希望我已经给了你足够的解决问题。

    【讨论】:

    • 正如我在上面写的那样,这些事情不再是问题了,程序编译得很好,这个错误来自 runhaskell..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2019-05-02
    • 2018-10-23
    相关资源
    最近更新 更多