對於高階(也稱爲更高kinded)參數多態,所以第一個值有一個類型,如果您將參數類型看作類型函數(類型的函數)的一種參數類型,那麼現在類型就有一種類型,例如IEnumerable<T>
是kind * - > *的類型函數,當您將類型應用於此類型函數時,您將獲得一種類型*。因此,這種觀點的參數類型(類型構造)類型的功能,我們可以開始談論高階型功能,可採取一種功能/函數的返回類型作爲參數。這就是所謂的高kinded多態性,這是缺乏語言如Java & C#極具表現力的類型系統的功能。如果您瞭解C++模板,那麼通過模板模板參數(是模板模板)可以獲得有限但不一致且幾乎無用的支持。
你可能不知道它爲什麼會是有這樣的功能有用嗎?以及它使得人們能夠表達更高層次的抽象,更通用的代碼,如單子&函子。標準的Haskell98支持更高主觀的多態性。
爲了您的一次函數爲例,首先你必須明白,在演算的所有功能只需要一個參數,並在你的榜樣箭頭實際上關聯到右側,這就是你實際有:
f - > g是零階。 f - >(g - > h)是一階函數,函數返回一個函數。 的F - >(克 - >(H - > i))的是二階,函數返回它返回一個功能的功能。
同樣的「僅一個參數」適用於類型,種類,排序(具有排序類型)功能。