类型类声明后的奇怪符号是什么意思

时间:2017-03-13 20:53:39

标签: haskell syntax type-kinds

ghci :i Functor给了我:

class Functor (f :: * -> *) where
  fmap :: (a -> b) -> f a -> f b
  ...

(f :: * -> *)是什么意思?看起来好像f需要是一个函数,但这没有意义。

1 个答案:

答案 0 :(得分:3)

星号*的Haskell符号,即“类型类型”。

Prelude> :k Int
Int :: *
Prelude> :k Maybe
Maybe :: * -> *
Prelude> :k []
[] :: * -> *
Prelude> :k Maybe Int
Maybe Int :: *

Functor类是为类型* -> *的类型构造函数定义的,它采用一种类型并返回一个类型。