以下のようなコードを書いて GHCi 上に読み込んでみました。
-- test.hs
class Bar x where
bar :: x -> x
class Foo x where
foo :: x a -> a
> :l test.hs
> :k Bar
Bar :: * -> Constraint
> :k Foo
Foo :: (* -> *) -> Constraint
こんなふうに、class
キーワードの部分の見た目は同じでも、それぞれが備えている関数によって Kind が変わります。
class
キーワードだけを見て、Kind が * -> Constraint
だと思い込んで悩んでしまいました...