質問: CCC Prelude> :kind CCC CCC :: * -> * -> * ```
回答: `*` という kind は、何も型引数を受け取らない「単なる型」を表すものです。 たとえば `Int` という型は、`1` とか `-2` とか `3 + 5` とかいった、値が求まれば整数になる項たちを表しているものです。同じように `*` という kind は、`Int` とか `String` とか `Maybe Int` とかいった単なる型たちを表しているものなのです。 `Maybe` には `* -> *` という kind が付きますが、これは型を受け取って型を返すことを表しています。`Maybe :: * -> *` と `Int :: *` があって、これを型適用すると `Maybe Int :: *` になる訳です。 kind で考えるのが分かりづらければ、まず型で考えてみてください。`Int` は整数を表す型で、`Int -> Int` は整数を受け取って整数を返す関数です。たとえば絶対値を返す関数 `abs :: Int -> Int` と整数 `-2 :: Int` があって、これを適用すると `abs (-2) :: Int` になる訳です。これと類似のお話を型のレベルへ 1 段上げたものが kind です。