[Haskell] kind

类型可以看做是值的“标签”,用来区分不同种类的值。
kind可以看做是类型的“标签”,用来区分不同的类型。

例如:

ghci> :k Int
Int :: *

kind为“*”,表示Int是一个具体类型。
具体类型是那些不接受类型参数的类型。
值的类型,只能是一个具体类型。

ghci> :k Maybe
Maybe :: * -> *

* -> *”这种kind,说明Maybe类型构造器,接受一个具体类型作为参数,返回一个具体类型。

ghci> :k Maybe Int
Maybe Int :: *

ghci> :k Either
Either :: * -> * -> *

这说明Either接受两个具体类型作为参数,返回一个具体类型。

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 :: * -> *

你可能感兴趣的:([Haskell] kind)