在Haskell中,使用雙冒號鍵入聲明,即(::),如not :: Bool -> Bool
。Haskell和Haskell類語言之間的類型聲明語法區別
但是在許多其語言與Haskell相似的語言中,例如,榆樹,阿格達, 他們使用單個冒號(:)來聲明類型。像not : Bool -> Bool
。
爲什麼這些語言放棄了haskell樣式類型聲明語法。
- 是(:)比(::)更好地聲明一個類型?
- 還是(::)更適合其他用途?
- 還是因爲(:)是一個小於(::)的字符?
在Haskell中,使用雙冒號鍵入聲明,即(::),如not :: Bool -> Bool
。Haskell和Haskell類語言之間的類型聲明語法區別
但是在許多其語言與Haskell相似的語言中,例如,榆樹,阿格達, 他們使用單個冒號(:)來聲明類型。像not : Bool -> Bool
。
爲什麼這些語言放棄了haskell樣式類型聲明語法。
聽說SPJ說,某個地方,這是一個爭論的問題,選擇:
和::
之間 。他和約翰·休斯最終以::
結算。從 的A History of Haskell: Being Lazy With Class紙:
我們從米蘭達採用的慣例,數據構造是 資本,而變量都沒有,並且加入了類似的規定 中綴構造,這在Haskell必須以一個冒號開始。爲了與我們的使用(來自SASL,KRC和Miranda的採用 )一致,我們選擇了後面的約定:對於列表「cons」 運算符。 (該選擇「:」類型 簽名利弊和「::」,順便說一下,是一個爭論激烈的話題(ML是否 對面),並仍然是有爭議的這一天。)
IIRC Haskell選擇使用::
是一個(不幸的)歷史事故。 Haskell基本上基於Miranda,其還使用::
作爲類型。米蘭達的作者真的希望利弊運營商是:
,因爲他們認爲它會更普遍使用,所以鍵入操作員必須被授權到::
。
它確實沒有被證明是一個好主意,因爲否則所有關於類型的文獻(甚至是談論Haskell)都使用:
。作爲最接近的paper at hand,雙冒號用於所有樣本(Haskell)代碼,但數學判斷(如第10頁)均遵循傳統單冒號。
我想我記得聽到的地方(編輯:這是here,但我懶得聽整個事情得到正確的時間),在當時,很多計劃生育研究人員只是想非常清楚地界定米蘭達,以便研究論文談論懶惰功能純語言可以有一個共同的語言來談論他們的想法。米蘭達的設計師不希望這樣做,而是表示如果用與米蘭達非常相似的另一種語言(爲了雙方的利益而提供的,這兩種語言仍然可以區分),他們會沒事的。 。這是Haskell委員會的起點。
FWIW,我認爲'::'實際上在頂層簽名中更好地閱讀,因爲它在值級別和類型級別之間帶來更多空間。 'not:Bool - > Bool'看起來有點像它應該被解析的'(不是:Bool) - > Bool'。但許多現有的中綴操作員都有很多相同的問題;我想這基本上只是你常用的東西。 – leftaroundabout
如果你假裝一個類型註釋是一個實際值,'::'是有道理的。它與任何其他中綴構造函數一樣以':'開頭,它在類型註釋的「真實」符號之前,並給出一個名稱和一個類型作爲參數,它返回一個類型註釋。 – chepner