2014-07-26 21 views

回答

8

這是「可怕的單一同態限制」。從本質上講,當你定義一個

  1. 新的頂級名稱,即
  2. 看起來並不像一個函數定義

然後,默認情況下,Haskell的嘗試是聰明,挑一個不那麼 - 完全一般的類型。原因最初是爲了使Haskell更易於使用(沒有它,編寫含有不明確類型的程序可能更容易),但最近它似乎只是讓每個人都行,因爲這是非常意外的行爲。

的決議?

  1. 使用GHC 7.8。 7.8版本之後,GHCI會話自動...
  2. 使用-XNoMonomorphismRestriction,從而關閉這種行爲,或
  3. 提供一個類型批註像

    let { x :: Num a => a -> a -> a; x = (+) } 
    

在正常Haskell代碼,方法( 3)是最強烈推薦的。當使用GHCi時,(1)和(2)更方便。

+0

我總是有':一套+ M'在GHCI多行輸入,我覺得有很多比使用上可以和其他報表牙套更方便。 – bheklilr

+0

GHC 7.8很難得到。 – PyRulez

+0

在GHCi中,類型註釋也可以寫成'let y =(+):: Num a => a - > a - > a',這可能更可取。 – Laar

相關問題