類型可以看做是值的“標簽”狈孔,用來區(qū)分不同種類的值信认。
而kind
可以看做是類型的“標簽”,用來區(qū)分不同的類型除抛。
例如:
ghci> :k Int
Int :: *
kind為“*
”狮杨,表示Int是一個具體類型。
具體類型是那些不接受類型參數(shù)的類型到忽。
值的類型橄教,只能是一個具體類型。
ghci> :k Maybe
Maybe :: * -> *
“* -> *
”這種kind
喘漏,說明Maybe
類型構(gòu)造器护蝶,接受一個具體類型作為參數(shù),返回一個具體類型翩迈。
ghci> :k Maybe Int
Maybe Int :: *
ghci> :k Either
Either :: * -> * -> *
這說明Either
接受兩個具體類型作為參數(shù)持灰,返回一個具體類型。
ghci> :k Either String
Either String :: * -> *
ghci> :k Either String Int
Either :: *
我們看Functor的定義负饲,
class Functor f where
fmap :: (a -> b) -> f a -> f b
這說明堤魁,
> :k f
f :: * -> *