2013-10-05 19 views

回答

22

在Haskell其名字由字母數字字符都默認前綴的功能,由+,>,$等字符組成的功能默認爲中綴。例如,你可以這樣定義

Prelude> let a $%^ b = a + b 
Prelude> :t ($%^) 
($%^) :: Num a => a -> a -> a 

同樣適用於構造函數中綴函數(編輯:作爲@ChrisTaylor正確地指出,與限制,即中綴構造函數的名稱必須與:開始)。該生產線

Prelude> data Rose a = a :> [Rose a] 

就是說:>是一個構造函數有兩個參數:

Prelude> :t (:>) 
(:>) :: a -> [Rose a] -> Rose a 

你還可創建一個普通的外觀構造函數

data Rose a = RoseCtr a [Rose a] 

這將具有相同類型。在某些情況下,中綴函數/構造函數更直觀,並使代碼更易於理解。

+2

您應該補充說infix類型的構造函數必須以:開頭,並且您需要TypeOperators語言編譯指示。 –

+1

@ChrisTaylor:謝謝,你對結腸很正確,但你確定這個編譯指示嗎? GHC 7.6.3似乎並不需要它。 – fjarri

+0

感謝您的解釋!但是我不明白操作員:>做了什麼?它是一個特殊的操作員還是創建的操作員,我是否可以把:<而不是:>? (什麼操作嗎?) – Skyfe