此代碼型別檢查:
type T :: Type -> foreach (r :: Type) -> Type -> Type
data T k r a
type T' :: Type -> Type
type T' a = T a Identity a
- 為什么編譯器在這里需要一種型別
Type -> Type(即Identity)?如果您替換Identity為 say ,它將無法進行型別檢查Int。 - 什么是
foreach關鍵字,如何在 Haskell 中使用它?
uj5u.com熱心網友回復:
它不是關鍵字,只是一個隱式量化的型別變數。就像你寫一個函式
foo :: Int -> foreach r -> Double
foo = undefined
main = print ( foo 123 (Just 'w')
, foo 789 [False, True, False] )
...soforeach r可以與Maybe Charor統一,[Bool]但不能統一,例如Float.
現在,在您的示例中,它更加奇怪,因為您還沒有申請Identity任何東西。這意味著foreach輸入T a Identity a似乎實際上是s簽名中的部分應用->運算子提升了一級......時髦的東??西。IdentityType -> Type
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427300.html
上一篇:嘗試為Haskell創建一個插入到串列中某個點的插入
下一篇:有什么作用。(點)代表什么?
