GHC 7.4更新中断haskell98?

and*_*tti 12 haskell ghc

我今天更新了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)
Run Code Online (Sandbox Code Playgroud)

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

 misere.hs:1:1: Not in scope: `System.Environment.withArgs'
Run Code Online (Sandbox Code Playgroud)

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

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

Dan*_*her 14

不仅需要改变ListData.List,而且还RandomSystem.Random进口getArgsSystem.Environment(但此刻,代码既不使用getArgs也不是从什么System.Random,所以暂时,还可以去除这些进口).

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

我对错误信息感到有些惊讶,我希望它能说出来

Could not find module `System'
It is a  member of the hidden package `haskell98-2.0.0.1'.
Run Code Online (Sandbox Code Playgroud)

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


nom*_*olo 6

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

ghc -package haskell98 -hide-package base
Run Code Online (Sandbox Code Playgroud)

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