[英]When was the GHC Haskell2010 first included in the Haskell Platform, and when were the Haskell98 style modules hidden?
[英]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.Environment
将System.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.