我很難理解更高類型與更高等級類型。種類非常簡單(感謝Haskell的文獻),我曾經認爲秩序在討論類型時就像善良,但顯然不是!我讀了維基百科文章無濟於事。那麼有人可以解釋什麼是排名?高級排名是什麼意思?更高級別的多態性?這是怎麼來的種類(如果有的話)?比較斯卡拉和哈斯克爾也會很棒。種類理論中的種類與等級
9
A
回答
11
排名的概念並不真正與種類的概念有關。
多態類型系統的等級描述了可能出現在類型中的哪個位置。在等級1型系統中,可能只出現在最外層,在等級2型系統中它們可能出現在一層嵌套等等。
因此,例如forall a. Show a => (a -> String) -> a -> String
將是排名第一的類型,forall a. Show a => (forall b. Show b => b -> String) -> a -> String
將是排名第二的類型。這兩種類型之間的區別在於,在第一種情況下,函數的第一個參數可以是任何使用一個可顯示參數並返回String的函數。因此,Int -> String
類型的函數將是有效的第一個參數(如假設函數intToString
),那麼類型forall a. Show a => a -> String
的函數(如show
)也是如此。在第二種情況下,只有forall a. Show a => a -> String
類型的函數纔是有效參數,即show
可以,但intToString
不會。因此下面的函數將是第二類的法律功能,而不是第(其中++
應該代表字符串連接):這裏的功能f
應用於
higherRankedFunction(f, x) = f("hello") ++ f(x) ++ f(42)
注意(可能)三種不同類型的論據。所以如果f
是功能intToString
這不起作用。
默認情況下,Haskell和Scala都是Rank-1(所以上述函數不能用這些語言編寫)。但是GHC包含一個語言擴展來支持Rank-2多態,而另一個支持任意n的Rank-n多態。
相關問題
- 1. 類型理論:型種
- 2. 一種類型與多種類型
- 3. 與多種類型
- 4. 的類型種類*
- 5. 種類多級陣列的PHP
- 6. 頂級URL的多種資源類型
- 7. WordPress的:兩種類型的評論?或多個分類法?
- 8. 類別降級(而不是種類升級)
- 9. 類別和子類別與種子.rb
- 10. 爲什麼這種類型不相等?
- 11. 如何管理同一類中的兩種類型的json?
- 12. 使一種類型成爲一種類型或另一種類型
- 13. 處理多種類型的錯誤
- 14. 在iOS 7中檢查類的種類
- 15. 如何在eclipse中放置$ NON-NLS-1 $種類的評論
- 16. 如何將一種類型轉換爲與包名相同的多種類型?
- 17. 如何定義類型級的回報另一種類型的級的值
- 18. UIStoryboardSegue子類識別種類
- 19. 檢索類和類實例的種類
- 20. 佈局與2種類型的瓷磚
- 21. 解析多種類型的JSON與GSON
- 22. 期限與這種類型的
- 23. 與多種通用類型的接口?
- 24. Java ArrayList與各種類型的對象
- 25. RecycleView與多種類型的子視圖
- 26. 與多種類型的WPF樹視圖
- 27. Common Lisp的類型與等級差別
- 28. 從一種類型到另一種類型的列表清單
- 29. 有兩種類型的Arraylist:如何確定第一種類型?
- 30. 將一種類型的對象分配給另一種類型
難道我們不能說排名限定類型變量,而種類限定類型常量嗎? – didierc
@didierc我不太清楚你的意思,但我不這麼認爲。類型變量和類型常量都有種類。 – sepp2k
你可以在scala中輕鬆編碼排名較高的類型。見http://www.cs.ox.ac.uk/jeremy.gibbons/publications/scalagp.pdf,第7.2節。 –