[英]What Does Kind Constraint mean in Haskell typeclass instance?
當Haskell中的類約束類型變量時,我明白這意味着什么。
例如,在 function 聲明中,
myFunction :: Foldable f => f a -> b
意味着 f 是一個具有 Foldable 實例的類型,它包裝了一些其他類型 a。
但是,當類型變量受種類約束時,這意味着什么?
例如考慮可折疊的這個定義:
class Foldable (t :: * -> *) where
此外,1 個示例來自 function 定義而另一個示例來自 class 定義這一事實對約束的含義有何影響?
t:: * -> *
不是約束,它是一種注解。 在這種情況下,它用於說明Foldable
可以采用 arguments 類型構造函數,例如Maybe
、 Identity
、 []
,甚至部分應用的構造函數,例如Either Bool
和(,) String
。 相比之下, Foldable Int
和Foldable [Bool]
屬於類錯誤。
t:: * -> *
可以理解為“ t
將類型映射到類型”。
關鍵是,當我們有Foldable f
時,我們會像在fa
中一樣使用f
,將f
應用於一個參數。 如果我們允許f = Maybe
我們得到Maybe a
這是有道理的。 如果我們允許f = Int
,我們將得到無意義Int a
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.