繁体   English   中英

GHC 7.4更新中断haskell98?

[英]GHC 7.4 update breaks haskell98?

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

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

GHC现在是版本7.4.1-2,从我设法理解它现在默认为haskell2010标准,而不是haskell98。 (正如我从ghc-pkg列表的输出中看到的):

haskell2010-1.1.0.1
(haskell98-2.0.0.1)

所以我将“import List”更改为“import Data.List”,我认为这是唯一的问题,但现在我得到以下内容:

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

这是从哪里来的,因为我从来没有导入System.Environment? 任何提示? 谢谢

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

您不仅需要将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的怪癖。

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

ghc -package haskell98 -hide-package base

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

首先,我认为你使用System.Environment.withArgs是因为getArgs使用withArgs。 System.Environment的Hackage.Haskell页面

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

其次,可能是List过去拥有的数据多于Data.List 您可能希望尝试包含整个Prelude而不仅仅是Data.List

为了回答标题中的问题,GHC的每次更新都扩展了Haskell98。 而且一些语言编译器甚至会制定一些Haskell98细节。 但是,大多数库中的变化都会导致问题,而GHC不会自行更新。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM