2011-03-19 78 views
2

我讀報紙Generics of a Higher Kind,第一句話就是一階參數多態性與一次函數

與Java 5和C#2.0,一階 參數多態性引入主流 對象 - 面向名稱仿製藥的 下 編程語言。

我不知道什麼是一階參數多態呢,我也不太明白什麼是一次函數,我知道高階函數是函數,它接受一個函數,返回一個函數,但我不不知道什麼是零階函數,一階函數。 只見解釋從here,像這樣:

的F - > G是零階
的F - >克 - > h是第一階
的F - >克 - >ħ - >我 是第二階
等。

任何人都可以爲我解釋這兩個術語嗎?

回答

6

對於高階(也稱爲更高kinded)參數多態,所以第一個值有一個類型,如果您將參數類型看作類型函數(類型的函數)的一種參數類型,那麼現在類型就有一種類型,例如IEnumerable<T>是kind * - > *的類型函數,當您將類型應用於此類型函數時,您將獲得一種類型*。因此,這種觀點的參數類型(類型構造)類型的功能,我們可以開始談論高階型功能,可採取一種功能/函數的返回類型作爲參數。這就是所謂的高kinded多態性,這是缺乏語言如Java & C#極具表現力的類型系統的功能。如果您瞭解C++模板,那麼通過模板模板參數(是模板模板)可以獲得有限但不一致且幾乎無用的支持。

你可能不知道它爲什麼會是有這樣的功能有用嗎?以及它使得人們能夠表達更高層次的抽象,更通用的代碼,如單子&函子。標準的Haskell98支持更高主觀的多態性。

爲了您的一次函數爲例,首先你必須明白,在演算的所有功能只需要一個參數,並在你的榜樣箭頭實際上關聯到右側,這就是你實際有:

f - > g是零階。 f - >(g - > h)是一階函數,函數返回一個函數。 的F - >(克 - >(H - > i))的是二階,函數返回它返回一個功能的功能。

同樣的「僅一個參數」適用於類型,種類,排序(具有排序類型)功能。