2012-11-30 109 views
3

如果出現錯誤,扣除語言編譯指示丟失的正確方法是什麼? 很多時候,我發現自己有一段時間無法弄清楚的錯誤。在經過數小時的苦惱之後,我意識到/ google /意外地發現,在插入缺失的編譯指示後,語言編譯指示缺失並且一切順利。Haskell語言編譯指示

它沒有顯示在錯誤中,沒有任何線索像「嘗試添加這樣和那樣的雜注」或類似的東西。我明白,有經驗的haskellers只是知道它。但是初學者呢?有沒有辦法指示編譯器提供線索?例如,除非我放置{ - #LANGUAGE ExtendedDefaultRules# - },否則我經常會遇到Snap框架的類型錯誤。我只是嘗試它,因爲我在其他源文件中看到它。 有沒有辦法切換所有常用的編譯指示,或者至少在出現錯誤時找出需要的編譯指示?

+3

至少最近的GHCs在我遇到的大多數情況下給出了一個建議。除此之外,如果您知道編譯指示,並且它確實連接了錯誤信息,請嘗試'不明確的類型變量';嗯,也許違約? 'ExtendedDefaultRules'。但是如果編譯器沒有提出任何建議,基本上有三種選擇。 1.知道(這種情況並不罕見,只是忘記了編譯)。 2.詢問(#haskell,Stack Overflow,郵件列表,...)。 3.猜測。按精確度的降序排列。 –

+0

我的經驗法則是避免語言擴展,所以我傾向於將錯誤追究爲實際錯誤並改變我做事的方式。 – singpolyma

+0

另外,如果錯誤信息沒有足夠的幫助,並且有可能編譯器已經告訴你擴展名,爲什麼不提交一個增強報告,而是在[ghc bugtracker]報告(http://hackage.haskell.org/trac/ghc /) - 最好用一個補丁。 –

回答

0

GHC現在爲大多數常見問題提供了編譯指示。 ExtendedDefaultRules永遠不會被建議,因爲它永遠不需要 - 相反,更明確的類型簽名可以避免它的需要。