2012-03-04 48 views
12

我今天更新GHC和我的小程序停止工作:現在GHC 7.4更新時間haskell98?

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) 

所以我改變了我的「導入列表」,以「進口Data.List模塊」,我認爲是唯一的問題,但現在我得到以下:

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

從哪裏來,因爲我從來沒有進口System.Environment? 任何提示? 謝謝

編輯: 我更新了github上的版本,以反映這個錯誤。實際上使用Data.List ghc編譯完美的文件,所以它的runhaskell會產生這個問題。

+1

你試過編譯'ghc -XHaskell98'嗎? – nominolo 2012-03-04 17:01:07

+0

該選項不存在我的ghc,我實際上是在尋找類似的東西.. – 2012-03-04 17:14:59

回答

14

不僅需要改變ListData.List,也RandomSystem.RandomSystem.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一個怪癖。

+0

對不起鏈接上的版本與我實際工作的版本不一樣,我在github上推送了當前版本,這讓我看到之前顯示的錯誤。 – 2012-03-04 17:15:52

+0

這很奇怪。我無法使用runhaskell或直接從shell運行新版本,因此在文件中沒有任何錯誤原因。 「runhaskell --version」報告是什麼?不是我期望的只是'runghc 7.4.1',但我想確認一下。 – 2012-03-04 22:24:09

+0

是的,我剛剛得到這個版本,我只是在另一臺機器上試過GHC的早期版本,並且一切正常......也許我會試着重新安裝Archlinux上所有與haskell相關的軟件包,看看它是否可行。 – 2012-03-05 09:49:01

2

首先,我想你使用System.Environment.withArgs是因爲getArgs,它使用withArgs。 Hackage.Haskell page for System.Environment

嘗試導入withArgs以及也許整個System.Environment。其次,它可能是List曾經有多於Data.List現在擁有的情況。您可能想嘗試包含整個Prelude而不僅僅是Data.List

爲了回答標題中的問題,GHC的每個更新都擴展了Haskell98。而且一些語言雜注甚至會製造一些Haskell98細節。但是,大多數圖書館的變化都會導致問題,而不是GHC自我更新。

希望我已經給你足夠的解決問題。

+0

正如我上面寫的這些東西不再是問題了,程序編譯好了,那個錯誤來自runhaskell .. – 2012-03-04 18:31:14

6

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

ghc -package haskell98 -hide-package base 

從長遠來看,雖然,它會更好,如果你升級至少要分層模塊名稱。使用Hoogle找出模塊的名稱。例如,http://www.haskell.org/hoogle/?hoogle=withArgs列出了System.Environment作爲導出模塊。